본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)

Java 1.8 컬렉션 stream, filter, map, foreach, sort

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 7. 15.

 

 

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);

 

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글