迁移Java 7将循环列表添加到java 8中

时间:2014-12-16 00:14:41

标签: java java-8

我正在将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);
}

2 个答案:

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

这种方式更有效率,但当然,它是否仍然“等同于发布的代码”是有争议的。