Java 8 java 8的流有很多混淆,如何提高代码质量 List List=Arrays.asList(1,2,3,4,5); //list.clear(); //增加(2); list=list.stream()。 mapToInt(整数->2)。 过滤器(整数->整数==2)。 独特的()。 boxed().collect(Collectors.toList());

Java 8 java 8的流有很多混淆,如何提高代码质量 List List=Arrays.asList(1,2,3,4,5); //list.clear(); //增加(2); list=list.stream()。 mapToInt(整数->2)。 过滤器(整数->整数==2)。 独特的()。 boxed().collect(Collectors.toList());,java-8,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().

它们有多大区别?重视阅读或使用新技术?

您想做的整个操作都有点错误

 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());
结果是一个
列表
,其中一个元素的值为
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 = list.stream()
            .filter(i -> i == 2)
            .collect(Collectors.toList());
将失败,因为
数组。asList
将创建一个不可变列表


但是,即使您有一个可变的ArrayList,区别在于使用流方法,您不会改变流的源;使用第一种方法时,您将删除所有内容并用不同的值重新填充。

您试图实现什么?
mapToInt(integer->2)
将列表中的每个给定值转换为
2
。该筛选器只允许
2
s,因此将5个
2
指定给
distinct()
。由于您只有
2
,因此结果将是一个
列表
,其中包含1
2
。如果您的问题是如何解决
list.clear();使用streams添加(2)
,然后答案是:您可能不应该这样做。可能是一个简单的
list=Arrays.asList(2)可以吗?或者流方式:
list=stream.of(2.collect)(Collectors.toList())。这不是我想要的,谢谢如果使用list=list.stream().filter(i->i==2.collect(Collectors.toList());如果列表不包含2,或包含重复的2?那就不是我所期望的了。@HavenLin那很容易尝试,你应该尝试一下。如果它不包含
2
,则结果列表将为空。如果初始列表中有多个
2
,则结果列表中将有多个结果。如果要删除重复项,可以收集到
集合
.collect(Collectors.toSet())但是来自请求的列表,我希望列表只包含2,而不是1empty@HavenLin您试图说您从一个请求中获得该列表,并且您将始终获得至少一个等于
2
的元素?对不起,我真的不明白你在说什么嗯,也许我错了,顺便说一句,我可以通过邮件或聊天工具与你联系吗?
 list.clear();
 list.add(2);