Я бы просто создал из него vavr Array
или Vector
и забыл бы о стоимости копирования.
Вы работаете с огромными коллекциями или делаете это в тесном oop? Если нет, я бы не стал слишком беспокоиться о стоимости копирования. Если да, вам придется подумать о чем-то, чтобы избежать преобразования, но это будет зависеть от фактического варианта использования. Не существует решения, подходящего для всех вариантов использования.
Вы также можете создать новый тип, который обернет ArrayList
, который лениво создает vavr Iterator
, Array
или Vector
, и вы выберите метод преобразования, который нужно вызвать на основе варианта использования, но полезность такого типа, на мой взгляд, ограничена.