다음을 통해 공유


ICollector 인터페이스

정의

변경 가능한 결과 컨테이너에 입력 요소를 누적하는 변경 가능한 감소 작업으로, 필요에 따라 모든 입력 요소가 처리된 후 누적된 결과를 최종 표현으로 변환합니다.

[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
특성
구현

설명

변경 가능한 결과 컨테이너에 입력 요소를 누적하는 변경 가능한 감소 작업으로, 필요에 따라 모든 입력 요소가 처리된 후 누적된 결과를 최종 표현으로 변환합니다. 감소 작업은 순차적으로 또는 병렬로 수행할 수 있습니다.

변경 가능한 감소 작업의 예로는 요소 Collection의 누적, 문자열을 사용하여 StringBuilder연결, 합계, 최소, 최대 또는 평균과 같은 요소에 대한 요약 정보 계산, "판매자별 최대 가치 트랜잭션"과 같은 "피벗 테이블" 요약 계산 등이 있습니다. 클래스 Collectors 는 많은 일반적인 변경 가능한 감소의 구현을 제공합니다.

A Collector 는 항목을 변경 가능한 결과 컨테이너에 누적하고 필요에 따라 결과에 대한 최종 변환을 수행하기 위해 함께 작동하는 네 개의 함수에 의해 지정됩니다. ul>li create of a new result container (#supplier())</li li><>incorporating a new data element into a result container (#accumulator())</li li><>combining two result containers into one (#combiner())</li li<>>performing an optional final transform on the container (#finisher())</li<>/ul><<>

또한 수집기는 더 나은 성능을 제공하기 위해 감소 구현에서 사용할 수 있는 힌트를 제공하는 특성(예: Characteristics#CONCURRENT일련의 특성)을 가지고 있습니다.

수집기를 사용하는 감소의 순차적 구현은 공급자 함수를 사용하여 단일 결과 컨테이너를 만들고 각 입력 요소에 대해 누적기 함수를 한 번 호출합니다. 병렬 구현은 입력을 분할하고, 각 파티션에 대한 결과 컨테이너를 만들고, 각 파티션의 내용을 해당 파티션의 하위 함수로 누적한 다음, 결합자 함수를 사용하여 하위 함수를 결합된 결과에 병합합니다.

순차적 및 병렬 실행이 동등한 결과를 생성하도록 하려면 수집기 함수는 em>ID</em> 및 결합성 제약 조건을 충족<해야 합니다.

ID 제약 조건에 따르면 부분적으로 누적된 결과에 대해 빈 결과 컨테이너와 결합하면 동일한 결과가 생성되어야 합니다. 즉, 일련의 누적기 및 결합자 호출 a 의 결과인 부분적으로 누적된 결과의 a 경우와 동일combiner.apply(a, supplier.get())해야 합니다.

결합성 제약 조건에 따르면 계산을 분할하면 동등한 결과가 생성되어야 합니다. 즉, 입력 요소 t1t2아래 계산의 결과는 r1r2 동일해야 합니다.

{@code
                A a1 = supplier.get();
                accumulator.accept(a1, t1);
                accumulator.accept(a1, t2);
                R r1 = finisher.apply(a1);  // result without splitting

                A a2 = supplier.get();
                accumulator.accept(a2, t1);
                A a3 = supplier.get();
                accumulator.accept(a3, t2);
                R r2 = finisher.apply(combiner.apply(a2, a3));  // result with splitting
            } 

특성이 없는 UNORDERED 수집기의 경우 누적된 결과 a1 두 개와 a2 같으면 finisher.apply(a1).equals(finisher.apply(a2))동일합니다. 순서가 지정되지 않은 수집기의 경우 순서 차이와 관련된 비 같음을 허용하도록 동등성이 완화됩니다. 예를 들어 요소를 A에 누적한 순서가 지정되지 않은 수집기는 순서를 List 무시하고 동일한 요소가 포함된 경우 해당하는 두 개의 목록을 고려합니다.

다음과 같이 축소를 Collector구현하는 라이브러리는 다음 제약 조건을 <준수해야 합니다. ul<>li>누적기 함수에 전달된 첫 번째 인수, 결합자 함수에 전달된 인수 및 피니셔 함수에 전달된 인수는 결과 공급자, 누적기 또는 결합자 함수의 이전 호출 결과여야 합니다.<Stream#collect(Collector)/li li><>구현은 결과 공급자, 누적기 또는 결합자 함수의 결과로 아무 작업도 수행하지 않아야 하며, 이를 누적기, 결합자 또는 피니셔 함수에 다시 전달하거나 축소 작업의 호출자에게 반환하는 것 외에는 아무 작업도 수행하지 않아야 합니다.</li li><>결과가 결합자 또는 피니셔 함수에 전달되고 동일한 개체가 해당 함수에서 반환되지 않으면 다시 사용되지 않습니다.</li li><>결과가 결합자 또는 피니셔 함수에 전달되면 누적기 함수에 다시 전달되지 않습니다.</li li><>비동기 수집기의 경우 결과 공급자, 누적기 또는 결합자 함수에서 반환된 모든 결과는 직렬로 스레드로 제한되어야 합니다. 이렇게 하면 추가 동기화를 구현할 필요 없이 컬렉션이 Collector 병렬로 수행됩니다. 감소 구현은 입력이 제대로 분할되고 파티션이 격리된 상태로 처리되며 결합이 누적이 완료된 후에만 수행되도록 관리해야 합니다.</li li><>동시 수집기의 경우 구현은 동시에 감소를 구현할 수 있지만 필요하지는 않습니다. 동시 감소는 누적 중에 결과를 격리하는 대신 동일한 동시 수정 가능한 결과 컨테이너를 사용하여 여러 스레드에서 누적기 함수를 동시에 호출하는 것입니다. 동시 감소는 Characteristics#UNORDERED 수집기의 특성이 있거나 원래 데이터의 순서가 지정되지 않은 경우에만 적용해야 합니다.</li></ul>

정적 팩터리 메서드 #of(Supplier, BiConsumer, BinaryOperator, Characteristics...)Collectors미리 정의된 구현 외에도 수집기를 생성하는 데 사용할 수 있습니다. 예를 들어 위젯을 with에 누적하는 수집기를 만들 수 있습니다.TreeSet

{@code
                Collector<Widget, ?, TreeSet<Widget>> intoSet =
                    Collector.of(TreeSet::new, TreeSet::add,
                                 (left, right) -> { left.addAll(right); return left; });
            }

(이 동작은 미리 정의된 수집기 Collectors#toCollection(Supplier)에서도 구현됩니다).

1.8에 추가되었습니다.

에 대한 java.util.stream.CollectorJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

속성

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
JniIdentityHashCode

래핑된 인스턴스의 java.lang.System.identityHashCode() 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Accumulator()

값을 변경 가능한 결과 컨테이너로 접는 함수입니다.

Characteristics()

Set 이 수집기의 Collector.Characteristics 특성을 나타내는 값을 반환합니다.

Combiner()

두 개의 부분 결과를 허용하고 병합하는 함수입니다.

Disposed()

인스턴스가 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 인스턴스에 대한 미해결 참조가 없으면 호출 Dispose()합니다. 그렇지 않으면 아무 작업도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
Finalized()

인스턴스가 종료될 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
Finisher()

중간 누적 형식에서 최종 결과 형식 A 으로 최종 변환을 수행합니다 R.

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

지정된 , accumulator, combinerfinisher 함수에 의해 설명된 supplierCollector 함수를 반환합니다.

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

지정된 , accumulator, combinerfinisher 함수에 의해 설명된 supplierCollector 함수를 반환합니다.

SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

변경 가능한 결과 컨테이너에 입력 요소를 누적하는 변경 가능한 감소 작업으로, 필요에 따라 모든 입력 요소가 처리된 후 누적된 결과를 최종 표현으로 변환합니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
Supplier()

변경 가능한 새 결과 컨테이너를 만들고 반환하는 함수입니다.

UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

변경 가능한 결과 컨테이너에 입력 요소를 누적하는 변경 가능한 감소 작업으로, 필요에 따라 모든 입력 요소가 처리된 후 누적된 결과를 최종 표현으로 변환합니다.

GetJniTypeName(IJavaPeerable)

변경 가능한 결과 컨테이너에 입력 요소를 누적하는 변경 가능한 감소 작업으로, 필요에 따라 모든 입력 요소가 처리된 후 누적된 결과를 최종 표현으로 변환합니다.

적용 대상