首页 > 解决方案 > Java 8 - 就地映射数组/集合

问题描述

Java 8 中有没有一种方法可以使用转换数组/集合map()而无需重新分配创建的副本,例如

Arrays.stream(array).mapInPlace(x -> x / 100);
list.stream().mapInPlace(e -> e.replaceAll(" ", ""));

代替

array = Arrays.stream(array).map(x -> x / 100).toArray();
list = list.stream().map(e -> e.replaceAll(" ", "")).collect(Collectors.toList());

?

如果不是,这个设计决定的原因是什么?

标签: javaarrayscollectionsjava-8java-stream

解决方案


也许List::replaceAll在您的情况下使用可以帮助您:

Arrays.asList(array).replaceAll(x -> x / 100);

list.replaceAll(e -> e.replaceAll(" ", ""));

Ideone 演示


@Holger的要点是,如果您需要可以使用的索引Arrays::setAll

Arrays.setAll(array, x -> array[x] / 100);

或者如果你希望你的工作是并行的更好,你可以使用Arrays::parallelSetAll

Arrays.parallelSetAll(array, x -> array[x] / 100);

推荐阅读