在流中交换地图和过滤器位置

时间:2018-03-18 10:07:15

标签: java

我互换了地图和过滤器的位置。它与代码完成的迭代次数有什么不同吗?

 List<String> Aname3 =names.stream()
     .map(name->name.toUpperCase())
     .filter(name->name.startsWith("A"))
     .collect(Collectors.toList());

 List<String> Aname4 =names.stream()
     .filter(name->!name.startsWith("A"))
     .map(name->name.toLowerCase())
     .collect(Collectors.toList());

2 个答案:

答案 0 :(得分:0)

过滤可能会过滤掉一些元素,因此映射到大写将在更少的元素上完成。所以,是的。最好先过滤。

答案 1 :(得分:0)

首先,这两个流管道具有不同的逻辑,将产生不同的输出。即使filtermap调用都接收到与输入相同的功能接口,但两个管道的结果可能仍然不同,因为map更改了Stream的元素以可能影响filter结果的方式,mapfilter的顺序会影响输出。

对于迭代次数,首先应用filter意味着map仅适用于通过过滤器的元素。

另一方面,首先应用map意味着它将应用于Stream中的所有元素。

因此,第二个流管道将执行较少的操作(假设并非所有元素都通过了过滤器)。