티스토리 뷰

728x90
반응형
stream 의 collect 의 groupby를 이용하여 특정 값에 대한 그룹을 지어주자
ex)  a = [{}] .b = [{}] , c=[{}]
Stream 그룹 처리 
Collectors.groupingBy() 사용
 
List<Map<String,String>> trendList = testService.selectTestList():
Map<String,List<Map<String,String>>> trendMap = trendList.stream().collect(Collectors.groupingBy(p->p.get("date")));

결과 예시 ) 2022-12=[{date=2022-12,cnt=3,gubun=A},{date=2022-12,cnt=1,gubun=B},{date=2022-12,cnt=4,gubun=C}]

Map 의 키값 기준으로 내림차순 정렬
Map<String,List<Map<String,String>>> trendMapSort = 
trendMap.entrySet().stream().sorted(Map.Entry.comparingByKey(Comparator.reverseOrder())).
collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1,e2) -> e1, LinkedHashMap::new));
stream 의 toMap 와 sum 을 이용한 list 특정 프로퍼티 기준 값 더하기 
 Map<String,Integer> map = (Map<String, Integer>)  resultlist.stream().collect(Collectors.toMap(
                     o1 -> ((TestVO) o1).getTestGubunVO().getTitle(), //key 값 선언
                     o2 -> ((TestVO) o2).getComPerson() // value 값 
                     , Integer :: sum // o1 key 와 값들을 더한다
           ));
ex) list = [{title : 'a', value ='1'} , {title : 'a' , value = 2}, { title : 'b' , value = 3}]
-> {title : 'a' , value = 3}, {title : 'b' , value = 3}


List<Map<String,String>> totalSumList  = new  ArrayList<Map<String,String>>();
//map 개수 만큼 반복문 동작
for(String key : map.keySet()) {
   Map<String,String> temp = new LinkedHashMap<String,  String>();
   temp.put("title", key);
   temp.put("total",String.valueOf(map.get(key)));
   totalSumList.add(temp);
}

 

728x90
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함