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 |
Возвращает значение |
JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
PeerReference |
JniObjectReference Возвращает экземпляр объекта Java в оболочке. (Унаследовано от IJavaPeerable) |
Методы
Accumulator() |
Функция, которая сворачивать значение в мутируемый контейнер результатов. |
Characteristics() |
Возвращает значение |
Combiner() |
Функция, которая принимает два частичных результата и объединяет их. |
Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
Finalized() |
Вызывается при завершении экземпляра. (Унаследовано от IJavaPeerable) |
Finisher() |
Выполните окончательное преобразование из промежуточного типа |
Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[]) |
Возвращает новый, |
Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[]) |
Возвращает новый, |
SetJniIdentityHashCode(Int32) |
Задайте значение, возвращаемое |
SetJniManagedPeerState(JniManagedPeerStates) |
Изменяющаяся операция сокращения, которая накапливает входные элементы в мутируемый контейнер результатов, при необходимости преобразовав накопленный результат в окончательное представление после обработки всех входных элементов. (Унаследовано от IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Задайте значение, возвращаемое |
Supplier() |
Функция, которая создает и возвращает новый мутируемый контейнер результатов. |
UnregisterFromRuntime() |
Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов. (Унаследовано от IJavaPeerable) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Изменяющаяся операция сокращения, которая накапливает входные элементы в мутируемый контейнер результатов, при необходимости преобразовав накопленный результат в окончательное представление после обработки всех входных элементов. |
GetJniTypeName(IJavaPeerable) |
Изменяющаяся операция сокращения, которая накапливает входные элементы в мутируемый контейнер результатов, при необходимости преобразовав накопленный результат в окончательное представление после обработки всех входных элементов. |