-
[Java] 스트림(Stream)의 최종 연산 - 요소의 수집 : collect()Java/Stream(스트림) 2022. 7. 29. 16:20반응형
목차
스트림(Stream)의 최종 연산 - 요소의 수집 : collect()
1. collect()
인수로 전달되는 Collectors 객체에 구현된 방법대로 스트림의 요소를 수집합니다. 또한, Collectors 클래스에는 미리 정의된 다양한 방법이 클래스 메소드로 정의되어 있습니다. 이 외에도 사용자가 직접 Collector 인터페이스를 구현하여 자신만의 수집 방법을 정의할 수도 있습니다.
스트림 요소의 수집 용도별 사용할 수 있는 Collectors 메소드는 다음과 같습니다.
1_1) 스트림을 배열이나 컬렉션으로 변환 : toArray(), toCollection(), toList(), toSet(), toMap()
예제) 해당 스트림의 요소를 List 객체로 반환public static void createStreamToList() { Stream<String> stream = Stream.of( "Python", "Java", "JavaScript", "PHP", "SQL", "Python", "Java", "JavaScript", "PHP", "SQL" ); List<String> strings = stream.collect(Collectors.toList()); strings.forEach(System.out::println); }
Console Output
예제) 해당 스트림의 요소를 Set으로 반환
public static void createStreamToSet() { Stream<String> stream = Stream.of( "Python", "Java", "JavaScript", "PHP", "SQL", "Python", "Java", "JavaScript", "PHP", "SQL" ); Set<String> stringSet = stream.collect(Collectors.toSet()); stringSet.forEach(System.out::println); }
Console Output
예제) 해당 스트림의 요소를 Map으로 반환
public static void createStreamToMap() { Stream<Language> languageStream = Stream.of( new Language(1, "Python"), new Language(2, "Java"), new Language(3, "JavaScript"), new Language(4, "PHP"), new Language(5, "SQL") ); Map<Integer, String> languageMap = languageStream.collect(Collectors.toMap(Language::getRank, Language::getLanguage)); languageMap.entrySet().forEach( (entry) -> System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue()) ); }
Console Output
예제) 해당 스트림의 요소를 Map으로 반환 - 키가 중복될 때 새 값을 무시하고 이전 값을 유지
public static void createStreamToMapDuplicateKey() { Stream<Language> languageStream = Stream.of( new Language(1, "Python"), new Language(2, "Java"), new Language(3, "JavaScript"), new Language(4, "PHP"), new Language(5, "SQL"), new Language(1, "Kotlin") ); Map<Integer, String> languageMap = languageStream.collect( Collectors.toMap(Language::getRank, Language::getLanguage, (l1, l2) -> l1) ); languageMap.entrySet().forEach( (entry) -> System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue()) ); }
Console Output
1_2) 요소의 통계와 연산 메소드와 같은 동작을 수행 : counting(), maxBy(), minBy(), summingInt(), averagingInt() 등
예제) 해당 스트림에서 순위가 가장 높은(rank:1) 요소를 반환public static void createStreamToMinBy() { Stream<Language> languageStream = Stream.of( new Language(1, "Python"), new Language(2, "Java"), new Language(3, "JavaScript"), new Language(4, "PHP"), new Language(5, "SQL"), new Language(6, "Kotlin") ); Optional<Language> opLanguage = languageStream.collect( Collectors.minBy((o1, o2) -> o1.getRank() - o2.getRank()) ); System.out.println(opLanguage.get().getLanguage()); } static class Language { public Integer rank; public String language; Language(Integer rank, String language) { this.rank = rank; this.language = language; } public Integer getRank() { return rank; } public String getLanguage() { return language; } }
Console Output
1_3) 요소의 소모와 같은 동작을 수행 : reducing(), joining()
예제) 해당 스트림의 요소를 ', '을 기준으로 합쳐서 문자열로 반환public static void createStreamToString() { Stream<String> stream = Stream.of("Python", "Java", "JavaScript", "PHP", "SQL"); String result = stream.map(Object::toString).collect(Collectors.joining(", ")); System.out.println("', '을 구분으로 합친 문자열 : " + result); }
Console Output
1_4) 요소의 그룹화와 분할 : groupingBy(), partitioningBy()예제) 해당 스트림의 요소의 글자 수에 따라 짝수와 홀수 리스트로 반환
public static void createStreamToPartitioningBy() { Stream<String> stream = Stream.of("Python", "Java", "JavaScript", "PHP", "SQL"); Map<Boolean, List<String>> patition = stream.collect( Collectors.partitioningBy(s -> (s.length() % 2) == 0)); System.out.println("글자 수가 짝수인 요소 : " + patition.get(true)); System.out.println("글자 수가 홀수인 요소 : " + patition.get(false)); }
Console Output
소스 코드는 Github Repository 참조하세요. - https://github.com/tychejin1218/blog/blob/main/stream/src/stream/Example09.java
반응형'Java > Stream(스트림)' 카테고리의 다른 글
[Java] 스트림(Stream)의 최종 연산 - 요소의 연산 : sum(), average() (0) 2022.07.25 [Java] 스트림(Stream)의 최종 연산 - 요소의 통계 : count(), max(), min() (0) 2022.07.25 [Java] 스트림(Stream)의 최종 연산 - 요소의 검사 : anyMatch(), allMatch(), noneMatch() (0) 2022.07.25 [Java] 스트림(Stream)의 최종 연산 - 요소의 검색 : findFirst(), findAny() (0) 2022.07.25 [Java] 스트림(Stream)의 최종 연산 - 요소의 소모 : reduce() (0) 2022.07.25