Java 8 Stream 불변 Collection
Java 8 Stream 불변 Collection
1. 소개
이 빠른 기사에서는 Java *Streams* 를 변경 불가능한 *콜렉션* 으로 수집하는 다양한 방법을 살펴볼 것입니다. 표준 *콜렉터* 는 변경 가능한 데이터 구조에서만 작동 하기 때문에 특별한 접근 방식이 필요합니다 .
2. 메이븐 의존성
Google의 구아바 라이브러리를 사용하여 몇 가지 예를 살펴 보겠습니다.
[여기](https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22) 에서이 종속성의 최신 버전을 얻을 수 [있습니다](https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22) .
3. Java의 collectAndThen () 사용
*collectingAndThen ()* 자바의에서 방법 *수집기* 클래스는 받아 *수집* 및 *피니셔 기능* 으로부터 반환 된 결과에 적용되는 *수집기 :*
우리가 toCollection를 사용할 수 없기 때문에 수집기는 직접, 우리는 임시 목록을 수집 요소를 필요로하고 그것에서 불변의리스트를 구성.
이 예제에서는 toList 수집기를 사용하여 Stream을 List로 변환 한 다음 ImmutableList를 만듭니다 . ImmutableList는 구아바 라이브러리의 일부입니다. 출력을 콘솔에 기록하면 기본 클래스를 얻습니다.
출력을 콘솔에 기록하면 기본 List 구현 클래스를 얻게 됩니다.
4. Guava's Collectors 사용 예제
Guava 21부터 모든 불변 클래스에는 표준 수집기 만큼 사용하기 쉬운 수집기가 함께 제공됩니다.
결과 인스턴스는 RegularImmutableList입니다.
5. Custom Collector 구축
이제 한 단계 더 나아가 사용자 정의 수집기를 구현해 보겠습니다 . 이 목표를 달성하기 위해 정적 Collector.of () 메소드 를 사용합니다 .
사용자 정의 수집기 구현에 대한 자세한 내용 은 [이 기사의](https://www.baeldung.com/java-8-collectors) 섹션 4를 [참조하십시오](https://www.baeldung.com/java-8-collectors) . 그리고 그게 다야. 위의 방법은 사용자 정의 클래스의 일부입니다
다른 내장 수집기 와 마찬가지로 이제 사용할 수 있습니다 .
마지막으로 출력을 확인하십시오.
5.1. MyImmutableListCollector 제네릭 만들기
구현에는 한 가지 제한 사항이 있습니다. 항상 ArrayList가 지원하는 불변 인스턴스를 반환합니다 . 그러나 약간의 개선으로이 콜렉터가 사용자 지정 유형을 리턴하도록 만들 수 있습니다.
이제 메소드 구현에서 공급 업체 를 결정하는 대신 사용자에게 공급 업체 를 요청합니다 .
우리는 이제 ArrayList 대신 LinkedList 를 사용하고 있습니다. 이것을 실행하고 결과를 보자.
6. 결론
이 짧은 기사에서 Stream을 불변 컬렉션으로 수집하는 다양한 방법을 보았습니다 .
이 기사의 전체 소스 코드 [를 GitHub에서](https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-streams-2) 확인하십시오 .
참고
[https://www.baeldung.com/java-stream-immutable-collection#using-javas-collectingandthen](https://www.baeldung.com/java-stream-immutable-collection#using-javas-collectingandthen)
Last updated
Was this helpful?