레거시 코드와 관련이없는 API를 개발하는 동안 종종 결과를 수집하여 Streams 파이프 라인으로 끝나는 메소드를 작성하는 경우가 종종 있습니다. 이 같은:
ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() {
return myPrivateThingies.stream()
.map(this::ownerOfThing)
.map(Owner::socialStatus)
.filter(SocialStatus::isHeAFineMatey)
.collect(MyCustomCollectors.toImmutableSet());
}
이제이 클래스의 대부분의 클라이언트는 일반적으로 요소를 검색하고 반복하기 위해 Collection (이 경우 ImmutableSet)이 필요하지만 일부 클라이언트는 Stream을 사용하여 더 많은 작업을 파이프 할 수 있습니다. 컬렉션에서 새로운 스트림을 얻을 필요가없는 스트림. 따라서 스트림을 반환하면 cliens에 방금 컬렉션이 있으면 얻을 수있는 옵션의 수퍼 세트가 제공됩니다 (결국 항상 collect()
스트림 자체를 사용할 수 있음) .
Stream<T> deriveSomethingMeaningfulFromPrivateState() {
return myPrivateThingies.stream()
.map(this::ownerOfthing)
.map(Owner::socialStatus)
.filter(SocialStatus::isHeAFineMatey);
// No collect
}
이 접근법은 잠재적 인 결함이 보이지 않기 때문에 시험 해보고 싶어합니다. 그러나 어떤 라이브러리 에서도이 접근법을 보지 못했을 것입니다 (Java 8이 등장한 후 릴리스 된 라이브러리가 많지 않은 것 같습니다). 기존 라이브러리 클래스는 일반적으로 개인 상태에서 무언가를 파생시킬 때 컬렉션을 반환합니다.
Java-8 이전의 자아가 컬렉션을 반환 할 때마다 스트림을 반환하기로 결정하면 나쁜 일 이 있습니까? 아니면 아마도 개인 국가에서 파생 된 모든 반 패턴으로 무언가를하고 있습니까?