很多与java 8流混淆,如何提高代码的质量

时间:2017-04-26 12:16:38

标签: java-8

 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
//        list.clear();
//        list.add(2);
 list = list.stream().
     mapToInt(integer -> 2).
     filter(integer -> integer ==2).
     distinct().
     boxed().collect(Collectors.toList());

他们有多么不同?重视阅读或使用新技术?

1 个答案:

答案 0 :(得分:2)

您想要执行的整个操作有点错误

 list = list.stream()
            .mapToInt(i -> 2) // every single element is transformed to "2"
            .filter(i -> i == 2) // since the previous step turns everything into 2, this one will take every element
            .distinct() // then you apply distinct, resulting in a single element
            .boxed()
            .collect(Collectors.toList());

结果是List,其中一个元素的值为2,但效率非常低。

如果你真的想要过滤,那么只需:

就会更容易
 list = list.stream()
            .filter(i -> i == 2)
            .collect(Collectors.toList());

除了你的初始代码:

 list.clear();
 list.add(2);

将失败,因为Arrays.asList将创建一个不可变列表。

但即使你有一个可变的ArrayList,不同的是你的流方法不会改变流的来源;当你第一次接近时,你会删除所有内容并用不同的值重新填充它。