Open skagmltn7 opened 1 year ago
먼저, Collectors class의 메서드와 Stream 인터페이스의 메서드는 모두 Java의 Stream API를 활용해 데이터를 처리하고 조작하는데 사용된다.
collect(Collectors.reducing())
: 이 메서드는 collect()
메서드의 매개변수로 사용되며, 스트림의 요소들을 수집(collect)하여 결과를 생성하는 데에 사용된다.Stream.reduce()
: 이 메서드는 Stream
인터페이스에 직접 정의되어 있으며, 스트림의 요소들을 축소하여 단일 결과를 반환하는 데에 사용된다.이 둘은 기본적으로 수행하는 방식은 같지만 사용방식과 특징에 조금 차이가 있다.
Collectors.reducing()
: 이 메서드는 collect()
메서드의 매개변수로 사용되며, 스트림의 요소들을 수집(collect)하여 결과를 생성하는 데에 사용된다.Stream.reduce()
: 이 메서드는 Stream
인터페이스에 정의된 메서드로, 스트림의 요소들을 축소하여 단일 결과를 반환하는 데에 사용된다.Collectors.reducing()
: collect()
메서드를 통해 사용될 때, Collectors.reducing()
을 활용하면 작업의 목적을 더 명확하게 표현할 수 있다.Stream.reduce()
: Stream
인터페이스의 메서드로 직접 사용할 때는 메서드 호출 자체만으로 작업의 의도를 이해하기 어려울 수 있다.Collectors.reducing()
: collect()
의 매개변수로 사용되므로, 다른 수집 작업과 조합하여 복잡한 작업을 수행하기 용이하다.Stream.reduce()
: 스트림 자체에 직접 적용되므로, 작업이 비교적 단순하고 직접적인 경우에 유용하다.Stream.count()
은 스트림 내의 요소 개수를 세는 간단한 작업을 수행하는 메소드로, 그 자체로는 요소의 개수만을 반환한다. 따라서 Stream.count()
을 사용하면 스트림의 요소 개수만을 계산할 수 있고, 그 외의 그룹화, 통계 정보 생성과 같은 복잡한 작업을 직접 처리하기에는 한계가 있다.
Collectors.counting()
은 이러한 제한을 극복하기 위해 collect()
메소드와 조합하여 다양한 수집 작업을 수행할 수 있는 방법을 제공한다. 특히 그룹화, 집계, 요약 정보 생성 등에서 요소의 개수가 중요한 역할을 하기 때문에 Collectors.counting()
을 활용하면 보다 효율적으로 작업을 처리할 수 있다.아래 코드를 실행해보면 차이가 있다는 것을 알 수 있다.
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamTest {
public static void main(String[] args) {
System.out.println(Stream.of(1, 2, 3, 4, 5)
.map(i -> {
System.out.println("processing " + i);
return i * 2;
}).count());
System.out.println();
System.out.println(Stream.of(1, 2, 3, 4, 5)
.map(i -> {
System.out.println("processing " + i);
return i * 2;
}).collect(Collectors.counting()));
}
}```
Stream.count()
API Note: An implementation may choose to not execute the stream pipeline (either sequentially or in parallel) if it is capable of computing the count directly from the stream source. In such cases no source elements will be traversed and no intermediate operations will be evaluated. Behavioral parameters with side-effects, which are strongly discouraged except for harmless cases such as debugging, may be affected. For example, consider the following stream:
라고 하네요
문제
Collectors.method() vs Stream.method() 어느 상황에 사용하는게 좋을까요?
contents - 세부 내용
책을 읽으면서 Stream메소드로 reduce있고 count가 다 있는데 collect()의 매개변수로 counting(), reducing을 사용하는 이유가 궁금했습니다. 어느 상황에 해당 메소드를 사용하는 것이 유용한지 알고싶어요.