我正在将java7代码迁移到Java 8.对于下面在Java 8中发布的代码,可以是等价的(最好是一个代码)
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> output = new ArrayList<>(list.size());
for(Integer n : list) {
int x = n * n * n;
output.add(x);
}
答案 0 :(得分:6)
您可以从list
获取stream,然后使用map
计算n * n * n
,然后通过Collectors
List<Integer> output = list.stream().map(n -> n * n * n).collect(Collectors.toList());
答案 1 :(得分:4)
如果您想要完全匹配,那就是:
list.forEach(n -> output.add(n*n*n));
或者如果您想使用Stream
API:
list.stream().map(n->n*n*n).forEachOrdered(output::add);
但是,通常你会让Stream
创建输出容器:
List<Integer> output = list.stream().map(n->n*n*n)
.collect(Collectors.toCollection(ArrayList::new));
或者如果您不需要List
成为ArrayList
:
List<Integer> output = list.stream().map(n->n*n*n).collect(Collectors.toList());
但是如果您不需要源代码为List<Integer>
,则以下内容会更有效:
List<Integer> output = IntStream.of(1, 2, 3, 4, 5).map(n->n*n*n)
.boxed().collect(Collectors.toList());
但也许你甚至不需要把结果变成List<Integer>
......
int[] output = IntStream.of(1, 2, 3, 4, 5).map(n->n*n*n).toArray();
这种方式更有效率,但当然,它是否仍然“等同于发布的代码”是有争议的。