시그마 삽질==six 시그마

java stream grouping() 후 각 그룹별 특정조건에 따라 한개씩만 추출 본문

프로그래밍/Java

java stream grouping() 후 각 그룹별 특정조건에 따라 한개씩만 추출

Ethan Matthew Hunt 2020. 10. 30. 23:11

List<Person>이 있는데 동일 나이(age)로 그룹핑한 후  각 그룹마다 키가 제일 큰(작은) 한 사람을 추출하고 싶을때

List<Reply> 가 있는데 동일 board_id로 그루핑한후 각 그룹마다 최신(or예전) reply 한개씩만 뽑아내고 싶을때== 각 board_id 마다 최신 댓글 한개씩 추출

 

ex)

List<Person> list = Arrays.asList(
	new Person.Builder().name("김지혜").age(20).height(185).build()
	, new Person.Builder().name("이정").age(20).height(181).build()
	, new Person.Builder().name("원빈").age(30).height(170).build()
	,new Person.Builder().name("정우성").age(30).height(190).build()
);



Map<Integer, Person> collect = list.stream().sorted(Comparator.comparing((Person::getHeight)).reversed())
.collect(Collectors.toMap(Person::getAge, x -> x, (x, y) -> x));
System.out.println("collect = " + collect);


collect = {
	20=Person(name=김지혜, age=20, height=185, job=null, carList=null, myPrecious=null), 
	30=Person(name=정우성, age=30, height=190, job=null, carList=null, myPrecious=null)
}

위 방식은 일단 키를 내림차순으로 해놓고 ,  age별로 그룹핑하는데 key값인 age가 동일한게 여러개 있으면 그중 첫번째꺼만 가져온다.

그래서 위에는 키가 동일 나이중에 키가 제일 큰 사람을 추출할 수 있는거다

 

 

 

 

stackoverflow.com/questions/23699371/java-8-distinct-by-property

 

'프로그래밍 > Java' 카테고리의 다른 글

CompletableFuture  (0) 2020.10.31
Stream collect 3탄(그룹핑후 매핑 및 집계)  (0) 2020.08.27
Stream collect 2탄(그룹핑)  (0) 2020.08.27
Stream collect 1탄  (0) 2020.08.27
[mac] java 버전 변경 jenv  (0) 2020.08.18
Comments