스트림의 그룹화 분활
Collectors partitioningBy()는 스트림을 2분활 한다.
Collector partitioningBy(Predicate predicate)
Collector partitioningBy(Predicate predicate , Collector downStream)
groupingBy() 는 스트립을 n분할 한다.
Collector groupingBy (Function classifier)
Collector groupingBy (Function classifier , Collector downStream)
Collector groupingBy (Function classifier , Supplier mapFactory , Collector downStream)
PartitionBy 는 2분할
GroupingBy는 n분할
partitioningBy
Map<Boolean , List<student>> stuBySex = strStream.collect(partitioningBy(student::isMale)); //성별로 분할
List<Student> maleStudent = stuBySex.get(true); //map 에서 true인값 남학생을 찾는다.
List<Student> femaleStudent = stuBySex.get(false); //map 에서 false인값 여학생을 찾는다.
map에 기준값(isMale)으로 true , false의 key값을 가진 map을 만든다.
Map<Boolean , Long> stuNumBySex = stuStream.collect(partitioningBy(student::isMale , counting())) //분할 + 통계
Map<Boolean , Optional<student>> topScoreBySex = stuStream
.collect(partitioningBy(student::isMale, maxBy(comparingInt(student::getScore)))) //성적 최대값 구하기
Map<Boolean , Map<Boolean , List<student>>> failedStuBySex = stuStream
.collect(partitioningBy(student::isMale , partitioningBy(s -> s.getScore() < 150))) //2중 분할 , 성별로 분할 후 성적으로 분할
failedStuBySex.get(true).get(true);
groupingBy() n분할
Map<Integer, List<student>> stuByBan = stuStream
.collect(groupingBy(student::getBan , toList())) //toList 생략가능
Map<Integer , Map<Integer, List<student>>> stuByHakAndBan = stuStream
.collect(groupingBy(student :: getHak ,gropingBy(student::getBan)))
//optional은 optional.get()으로 값을 꺼내야 한다.
'JAVA' 카테고리의 다른 글
스트림11 스트림의 collector로 reducing 그룹별 리듀싱 (0) | 2023.03.17 |
---|---|
스트림10 최종연산 collect 와 colltors (0) | 2023.03.16 |
스트림9 최종연산 reduce() (0) | 2023.03.16 |
스트림8 최종연산 forEach() (0) | 2023.03.16 |
Optional<T> (0) | 2023.03.16 |