java 1.8에서의 강력한 기능중 하나는 컬렉션의 내용을 stream을 통해서 여러 람다식을 표현 할 수 있는 점이다.
Javascript처럼 배열(Array)을 가공하는 느낌이 나서 무척 좋았다.
//샘플 데이터
List<HashMap<Object, Object>> list = new ArrayList<HashMap<Object, Object>>();
HashMap<Object, Object> req = new HashMap<Object, Object>();
req.put("id", "admin");
req.put("text", "ab");
req.put("type", "A");
list.add(req);
req = new HashMap<Object, Object>();
req.put("id", "test");
req.put("text", "hello");
req.put("type", "B");
list.add(req);
req = new HashMap<Object, Object>();
req.put("id", "admin2");
req.put("text", "GOOD");
req.put("type", "A");
list.add(req);
req = new HashMap<Object, Object>();
req.put("id", "root");
req.put("text", "ab");
req.put("type", "C");
list.add(req);
req = new HashMap<Object, Object>();
req.put("id", "admin2");
req.put("text", "GOOD");
req.put("type", "A");
list.add(req);
위 샘플데이터를 토대로 다양한 기능들을 사용하여 보았다.
1. foreach를 통한 출력 기능
//원본 list 내용 출력
list.stream().forEach(System.out::println);
//람다로 풀어쓴 모습
list.stream().forEach( target->{
System.out.println(target);
});
2. 필터(filter)
//type이 A인 내용만 가져오기
Stream<HashMap<Object, Object>> list2 = list.stream().filter(oo-> oo.get("type").toString().equals("A") );
list2.forEach(System.out::println);
3. 필터를 통한 대상 합(count) 구하기
long count = list.stream().filter( oo-> oo.get("type").toString().equals("A") ).count();
System.out.println("count : " + count);
4. map으로 가공
//NEW 라는 키와 A라는 값을 추가하기
List<HashMap<Object, Object>> list3 = list.stream().map( oo-> {oo.put("NEW", "A"); return oo;} ).collect(Collectors.toList());
list3.forEach(System.out::println);
5. map을 숫자로 표현(mapToInt, sum)
//map 객체를 숫자로, 총 합
int mapToInt = list.stream().mapToInt(HashMap::size).sum();
System.out.println(mapToInt);
6. list에 있는 HashMap을 단일 원소로 반환
//flatmap을 통해 1개의 단일 원소로 반환
Stream<Object> list4 = list.stream().flatMap(x-> x.keySet().parallelStream());
list4.forEach(System.out::println); //map이 1개의 list안에 들어간 모양으로 출력
7. 중복제거(distinct)
//distinct를 활용한 중복 제거
Stream<HashMap<Object, Object>> list5 = list.stream().distinct();
list5.forEach(System.out::println);
8. 정렬(sort)
//일반정렬, 통상 map 객체가 아닌 문자, 숫자 대상으로 자주 사용.
list.stream().sorted();
list.forEach(System.out::println);
9. Map 객체 정렬
//Map객체에 대한 정렬
list.sort(Comparator.comparing(
m -> m.get("id").toString(),
Comparator.nullsLast(Comparator.naturalOrder()))
);
list.forEach(System.out::println);
반응형
'Java(자바)' 카테고리의 다른 글
Java UnsupportedOperationException, unmodifiableList (0) | 2019.07.19 |
---|---|
Java mail Transport의 커넥션을 활용한 속도 차이(일반발송, 동보발송) (0) | 2019.07.18 |
Java HashMap 반복문(loop) (0) | 2019.07.11 |
Java List unmodifiableList (final 같은 배열) (0) | 2019.06.21 |
Java synchronized, ReentrantLock, semaphore (0) | 2019.06.13 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글