티스토리 뷰
일하면서 사용한 java stream 몇 가지 예제들을 기록해둔다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamFilter01 {
public static void main(String[] args) {
HashMap<String, Object> user01 = new HashMap<String, Object>();
user01.put("name", "김땡땡");
user01.put("age", 23);
user01.put("company", "A company");
HashMap<String, Object> user02 = new HashMap<String, Object>();
user02.put("name", "이땡땡");
user02.put("age", 34);
user02.put("company", "B company");
HashMap<String, Object> user03 = new HashMap<String, Object>();
user03.put("name", "박땡땡");
user03.put("age", 31);
user03.put("company", "A company");
// 기준 데이터
List<HashMap<String, Object>> userInfoList = new ArrayList<HashMap<String, Object>>();
userInfoList.add(user01);
userInfoList.add(user02);
userInfoList.add(user03);
/*
* 01. 특정 키의 값들만 배열로 뽑아내기.
*/
Object[] userCompany = userInfoList.stream().map(m -> m.get("company")).toArray();
// Object배열을 String배열로 변환
String[] userCompanyStrArr = Arrays.stream(userCompany).toArray(String[]::new);
// String[] userCompanyStr = Arrays.copyOf(userCompany, userCompany.length, String[].class);
// [A company, B company, A company]
System.out.println(Arrays.toString(userCompanyStrArr));
/*
* 02. 특정 키를 기준으로 중복 제거
*/
List<HashMap<String,Object>> distinctMapList = userInfoList.stream().filter(distinctByKey(x -> Arrays.asList(x.get("company")))).collect(Collectors.toList());
// [{name=김땡땡, company=A company, age=23}, {name=이땡땡, company=B company, age=34}]
System.out.println(distinctMapList.toString());
/*
* 03. A키의 값이 조건에 참이면 해당 map의 B키 값들만 목록으로 뽑아내기.
*/
List<String> overThirtyNameList = userInfoList.stream().filter(x -> (Integer)x.get("age") > 30).map(m -> m.get("name").toString()).collect(Collectors.toList());
// [이땡땡, 박땡땡]
System.out.println(overThirtyNameList.toString());
/*
* 04. 특정 키를 기준으로 정렬
*/
Stream<HashMap<String, Object>> userInfoListStream = userInfoList.stream();
List<HashMap<String, Object>> sortedUserInfoList = userInfoListStream.sorted((key1, key2)
-> key2.get("name").toString().compareTo(key1.get("name").toString())).collect(Collectors.toList());
// key2와 key1의 위치를 바꾸면 asc정렬.
// [{name=이땡땡, company=B company, age=34}, {name=박땡땡, company=A company, age=31}, {name=김땡땡, company=A company, age=23}]
System.out.println(sortedUserInfoList);
}
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> set = ConcurrentHashMap.newKeySet();
return t -> set.add(keyExtractor.apply(t));
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 연관된 정렬.
* 회사명 오름차순으로 먼저 정렬한 뒤, 그 회사명으로 정렬된 내용 중에서 이름 오름차순으로 정렬.
*/
public class ListMapSort {
public static void main(String[] args) {
List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
list.add(getMember("이태민", "A Company", 5400));
list.add(getMember("이진기", "A Company", 7200));
list.add(getMember("김종현", "B Company", 64000));
list.add(getMember("김기범", "B Company", 8200));
list.add(getMember("최민호", "C Company", 9000));
Stream<HashMap<String, Object>> stream = list.stream();
List<HashMap<String, Object>> sortedList = stream.sorted(MapSortTest02::comparator).collect(Collectors.toList());
for(int i = 0; i < sortedList.size(); i++) {
System.out.println(sortedList.get(i));
}
}
public static int comparator(HashMap<String, Object> map1, HashMap<String, Object> map2) {
if(map1 == null && map2 == null) return 0;
if(map1 == null || map2 == null) throw new NullPointerException();
// 회사명 비교
String company1 = (String) map1.get("company");
String company2 = (String) map2.get("company");
int companyCmp = company1.compareTo(company2);
if(companyCmp != 0) return companyCmp;
// 이름 비교
String name1 = (String) map1.get("name");
String name2 = (String) map2.get("name");
int nameCmp = name1.compareTo(name2);
if(nameCmp != 0) return nameCmp;
return 0;
}
public static HashMap<String, Object> getMember(String name, String company, int salary) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("name", name);
map.put("company", company);
map.put("salary", salary);
return map;
}
}
'공장 (factory) > - Programming..' 카테고리의 다른 글
[SpringBoot] applicationtests contextloads() failed (0) | 2021.12.15 |
---|---|
[Spring/Java] Redis Spring Framework 연동 (0) | 2021.10.01 |
[Java] Reflection을 활용한 메서드, 필드 값 불러오기. (0) | 2021.01.22 |
[Python] PIL(Python Image Library) 이미지에 텍스트 넣기. (0) | 2020.04.09 |
[Python] paramiko를 이용한 ssh접속 후 명령어 실행. (2) | 2020.04.09 |
댓글