Какую коллекцию vavr использовать для упаковки java.util.ArrayList

У меня есть java.util.ArrayList, возвращенный библиотекой. Как только я получу объект, я хотел бы преобразовать его в коллекцию vavr.

Что я должен использовать, чтобы минимизировать вычисления для этого? У меня нет четкого сценария использования после этого.

  1. Первое, что приходит в голову, это использовать io.vavr.collection.Iterator.ofAll(x), но это будет оптимально, только если я буду повторять.
  2. Использование io.vavr.collection.Vector или io.vavr.collection.Array создаст коллекции vavr.

Что я должен использовать? Их можно назвать представлениями (не оболочками). Существуют ли какие-либо рекомендации о том, как правильно взаимодействовать между коллекциями java и vavr с минимальными трениями/вычислениями - в конечном итоге только тогда, когда это необходимо?


Обновить

Вопрос похож на Ленивый просмотр java.util.Collection в Vavr< /а>


person raisercostin    schedule 21.03.2020    source источник


Ответы (1)


Я бы просто создал из него вавр Array или Vector и забыл о стоимости копирования.

Вы работаете с огромными коллекциями или делаете это в тесном цикле? Если нет, то я бы не слишком беспокоился о стоимости копирования. Если да, вам придется подумать о том, чтобы избежать преобразования, но это будет зависеть от фактического варианта использования. Не существует решения, подходящего для всех случаев использования.

Вы также можете создать новый тип, обертывающий ArrayList, который лениво создает либо vavr Iterator, либо Array, либо Vector, и вы выбираете, какой метод преобразования вызывать в зависимости от варианта использования, но полезность такого типа, на мой взгляд, ограничена. .

person Nándor Előd Fekete    schedule 21.03.2020
comment
В общем, лучше с этим не заморачиваться. Тем не менее я пытался выяснить, есть ли какие-то идиомы/концепции/типы совместимости, о которых я не знаю. - person raisercostin; 21.03.2020
comment
Я понимаю, чего вы хотите добиться, но я не знаю такой конструкции в vavr. Все коллекции Vavr являются неизменяемыми, поэтому они не могут обернуть какие-либо изменяемые коллекции Java, поскольку это нарушит гарантии, которые эти коллекции дают потребителю API. Кроме того, Iterator должен быть недолговечным объектом, когда базовые коллекции являются изменяемыми, как в случае с коллекциями JDK, поскольку Iterator должен быстро отказывать в случае изменения базовой коллекции. Таким образом, итератор — это не то, что вы должны носить с собой в своем коде. Это то, что вы создаете и потребляете сразу после этого. - person Nándor Előd Fekete; 21.03.2020