Поделиться через


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; вычислений сводной информации об таких элементах, как сумма, min, max или average; вычисления "сводная таблица", такие как "максимальная транзакция по продавцу" и т. д. Collectors Класс предоставляет реализации многих распространенных мутируемых сокращений.

Определяется Collector четырьмя функциями, которые работают вместе, чтобы накапливать записи в мутируемый контейнер результатов и при необходимости выполнять окончательное преобразование результата. Они: <<>создание нового контейнера результатов (#supplier())</>><li li>, включающего новый элемент данных в результирующий контейнер ()</li><, объединяющий два контейнера результатов в один (#combiner())</li li>>, выполняющий необязательный окончательный преобразование контейнера (#finisher()#accumulator())/li<>()</li></ul>

Сборщики также имеют набор характеристик, таких как Characteristics#CONCURRENTуказание, которое может использоваться реализацией сокращения для повышения производительности.

Последовательная реализация сокращения с помощью сборщика создаст один контейнер результатов с помощью функции поставщика и вызовет функцию аккумулятора один раз для каждого входного элемента. Параллельная реализация секционирует входные данные, создает контейнер результатов для каждой секции, накапливает содержимое каждой секции в подресуляции для этой секции, а затем использует функцию объединения для объединения подресулов в объединенный результат.

Чтобы обеспечить последовательные и параллельные выполнения эквивалентных результатов, функции сборщика должны удовлетворять <ограничения эм-удостоверений></эм> и ассоциативности.

Ограничение удостоверений говорит, что для любого частично накапливаемого результата, объединяя его с пустым контейнером результатов, должен получить эквивалентный результат. То есть для частично накапливаемого результата a , который является результатом любого ряда вызовов аккумулятора и объединения, a должен быть эквивалентен combiner.apply(a, supplier.get()).

Ограничение ассоциативности говорит, что разделение вычислений должно получить эквивалентный результат. То есть для всех входных элементов t1 и t2результатов r1 и r2 вычислений ниже должны быть эквивалентны:

{@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)). Для неупорядоченных сборщиков эквивалентность расслаблена, чтобы обеспечить неупорядоченное равенство, связанное с различиями в порядке. (Например, неупорядоченный сборщик, накапливающий элементы для List двух списков, эквивалентных, если они содержат одни и те же элементы, игнорируя порядок.)

Библиотеки, реализующие сокращение на основе Collectorтаких Stream#collect(Collector)ограничений, должны соответствовать следующим ограничениям: <ul><li>Первый аргумент, переданный в функцию аккумулятора, оба аргумента, передаваемые функции объединения, и аргумент, переданный в функцию завершения, должен быть результатом предыдущего вызова поставщика результатов, аккумулятора или функции объединения.</li><>реализация не должна ничего делать с результатом любого поставщика результатов, аккумулятора или функции объединения, кроме того, чтобы передать их снова в функцию аккумулятора, объединения или завершения, или вернуть их вызывающему объекту операции сокращения.</li li><>, если результат передается в функцию объединения или завершения, и тот же объект не возвращается из этой функции, он никогда не используется снова.</li li><>После того, как результат передается в функцию объединения или завершения, он никогда не передается в функцию аккумулятора снова.</li li><>Для не одновременных сборщиков любые результаты, возвращаемые поставщиком результатов, накопительными функциями или функциями объединения, должны быть последовательно ограничены потоком. Это позволяет параллельно выполнять коллекцию без Collector необходимости реализовать дополнительную синхронизацию. Реализация сокращения должна управлять тем, что входные данные правильно секционированы, что секции обрабатываются в изоляции, и объединение происходит только после завершения накопления.</li li><>Для одновременных сборщиков реализация является бесплатной (но не обязательной для одновременного сокращения). Параллельное сокращение является одним из случаев, когда функция аккумулятора вызывается одновременно из нескольких потоков, используя один и тот же контейнер результатов, изменяемый одновременно, а не сохраняя результат изолированным во время накопления. Параллельное сокращение должно применяться только в том случае, если сборщик имеет Characteristics#UNORDERED характеристики или если исходные данные не упорядочены.</li></ul>

Помимо предопределенных реализаций, Collectorsметоды #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) статической фабрики можно использовать для создания сборщиков. Например, можно создать сборщик, который накапливает мини-приложения в приложение 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 для java.util.stream.Collector.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Свойства

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от 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[])

Возвращает новый, Collector описанный заданным supplier, accumulatorcombinerи finisher функциями.

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

Возвращает новый, Collector описанный заданным supplier, accumulatorcombinerи finisher функциями.

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)

Изменяющаяся операция сокращения, которая накапливает входные элементы в мутируемый контейнер результатов, при необходимости преобразовав накопленный результат в окончательное представление после обработки всех входных элементов.

Применяется к