Java 8 - 在适当的位置映射数组/集合

Doo*_*opy 5 java arrays collections java-8 java-stream

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

Arrays.stream(array).mapInPlace(x -> x / 100);
list.stream().mapInPlace(e -> e.replaceAll(" ", ""));
Run Code Online (Sandbox Code Playgroud)

代替

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

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

YCF*_*F_L 8

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

Arrays.asList(array).replaceAll(x -> x / 100);
Run Code Online (Sandbox Code Playgroud)

list.replaceAll(e -> e.replaceAll(" ", ""));
Run Code Online (Sandbox Code Playgroud)

Ideone演示


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

Arrays.setAll(array, x -> array[x] / 100);
Run Code Online (Sandbox Code Playgroud)

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

Arrays.parallelSetAll(array, x -> array[x] / 100);
Run Code Online (Sandbox Code Playgroud)

  • ...如果你需要索引,`Arrays.setAll(array,index - > expression);` (5认同)