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
,因此结果将是一个列表
,其中包含12
。如果您的问题是如何解决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);