【问题标题】:Java 8 - Map an Array/Collection in placeJava 8 - 就地映射数组/集合
【发布时间】:2019-02-10 10:55:27
【问题描述】:

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());

?

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

【问题讨论】:

标签: java arrays collections java-8 java-stream


【解决方案1】:

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

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

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

Ideone demo


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

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

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

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

【讨论】:

  • ……如果您需要索引,Arrays.setAll​(array, index -> expression);
  • 谢谢@Holger 这是个好技巧,即使我们可以使用parallelSetAll
猜你喜欢
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2014-01-10
  • 2018-03-30
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多