Java 8에서의 스플리터, 수집기 및 스트림에 대해서
Java 8의 인터페이스, 특히 및 인터페이스와 관련된 인터페이스를 이해하는 데 문제가 있습니다.내 문제는 내가 그저 이해할 수 없다는 것이다.Spliterator
및Collector
「 」, 「 」, 「 」, 「 」,Stream
이치노
죠?Spliterator
a. a. a.Collector
내가 쓸 Spliterator
★★★★★★★★★★★★★★★★★」Collector
내 것 같아)Stream
그과과))))???????
웹에 흩어져 있는 예시를 읽었지만, 여기의 모든 것은 아직 새롭고 변경될 수 있기 때문에 예시와 튜토리얼은 여전히 매우 희박합니다.
.Spliterator
「아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다Collection
사용자가 직접 입력하고 병렬화된 작업을 최적화하려고 합니다.
는 몰라도Spliterator
는 컬렉션의 일부분을 쉽게 분할할 수 있도록 하는 방법입니다.예를 들어 병렬화 중이고 한 스레드는 컬렉션의 한 부분에서 작업하고 한 스레드는 다른 부분에서 작업해야 하기 때문입니다.
으로는 절대 것이 좋습니다.Stream
이치노 Stream
의 ★★★★★★★★★★★★★★★★.Iterator
자바독의 예시와 같이 거의 항상 유창 체인으로 사용하는 일회성 객체입니다.
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
Collector
는 맵 또는 맵에서 가능한 가장 일반적이고 추상적인 버전의 "솔루션" 연산입니다.특히 병렬화 및 최종화 단계를 지원해야 합니다.의 예Collector
에는 다음이 포함됩니다
- 계, ::
Collectors.reducing(0, (x, y) -> x + y)
- Builder String Builder)
Collector.of(StringBuilder::new, StringBuilder::append, StringBuilder::append, StringBuilder::toString)
Spliterator
기본적으로 "분할 반복기"를 의미합니다.
통과할 수 에는 스플리테이터의 .trySplit()
그러면 다른 사용자(일반적으로 다른 스레드)가 처리할 섹션이 "분리"되어 현재 스플리터 작업이 줄어듭니다.
Collector
의 사양을 조합하다reduce
(지도 감소에 대한) 함수, 초기값 및 두 결과를 결합하는 함수(따라서 분할된 작업 스트림의 결과를 결합할 수 있습니다.)
예를 들어 가장 기본적인 수집기는 초기값이 0이고 기존 결과에 정수를 추가한 후 두 결과를 추가하여 '결합'합니다.즉, 분할된 정수의 흐름을 합한 것입니다.
참조:
다음은 사전 정의된 수집기를 사용하여 일반적인 가변 감소 태스크를 수행하는 예입니다.
// Accumulate names into a List
List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());
// Accumulate names into a TreeSet
Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
// Convert elements to strings and concatenate them, separated by commas
String joined = things.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
// Compute sum of salaries of employee
int total = employees.stream()
.collect(Collectors.summingInt(Employee::getSalary)));
// Group employees by department
Map<Department, List<Employee>> byDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
// Compute sum of salaries by department
Map<Department, Integer> totalByDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
// Partition students into passing and failing
Map<Boolean, List<Student>> passingFailing =
students.stream()
.collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
인터페이스 - 스트림의 핵심 기능입니다.
및 디폴트 방식이 인터페이스에 표시됩니다.이러한 메서드는 에 대한 콜을 통해 스플리테이터를 사용합니다.spliterator()
:
...
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
default Stream<E> parallelStream() {
return StreamSupport.stream(spliterator(), true);
}
...
스플리터(Spliterator)는 스트림을 작은 부분으로 분할하는 내부 반복기입니다.이 작은 부품들은 병렬로 가공할 수 있다.
다른 방법 중 스플리테이터를 이해하는 데 가장 중요한 두 가지 방법이 있습니다.
boolean tryAdvance(Consumer<? super T> action)
와는 달리 다음 요소를 사용하여 작업을 수행하려고 합니다.작업이 성공적으로 실행되면 메서드가 반환됩니다.true
않으면 를 반환합니다.false
즉, 스트림의 뜻입니다 - ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ.Spliterator<T> trySplit()
이 방법을 사용하면 데이터 세트를 하나 또는 다른 기준(파일 크기, 줄 수 등)에 따라 더 작은 여러 세트로 분할할 수 있습니다.
언급URL : https://stackoverflow.com/questions/19235606/understanding-spliterator-collector-and-stream-in-java-8
'source' 카테고리의 다른 글
휴지 상태 - 배치 업데이트에서 업데이트에서 예기치 않은 행 수가 반환되었습니다: 0 실제 행 수: 0 예상: 1 (0) | 2023.01.19 |
---|---|
twig: 여러 조건이 있는 경우 (0) | 2023.01.15 |
단일 컬럼에 대해 apply() 함수를 사용하려면 어떻게 해야 합니까? (0) | 2023.01.15 |
매크로가 정의되어 있지 않다면 왜 매크로만 정의합니까? (0) | 2023.01.15 |
php에서 비트마스크를 구현하려면 어떻게 해야 하나요? (0) | 2023.01.15 |