Stream流的筛选与分割

  • 筛选和分割操作

用方法作为“谓词”筛选,通过返回一个boolean类型作为参数,来返回满足“谓词”的流。列如:下面的流的谓词是i取余2为0,满足这个条件为true会被返回到流中,否则为false不会被返回。返回的流中包含2,2,4


List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i -> i % 2==0).collect(Collectors.toList());

筛选各异的流中的元素用distinct方法。如果流中存在相同的元素,就会剔除或者说是只有一个会放在流中。比如上面的数据能取余2余0的有第2个数据和第6个数据满足“谓词”,返回的流中不会出现俩个2,最终是2,4


List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i>i%2==0).distinct().collect(Collectors.toList());

截断流:流支持limit(n)方法,该方法会返回一个不超过给定长度的流。所需的长度作为参数传递给limit。如果流是有序的,则最多会返回前n个元素。列如:满足谓词条件的 返回一个元素是2。


List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i -> i % 2 == 0).limit(1).collect(toList());

跳过元素:流还支持skip(n)方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。请注意,limit(n)和skip(n)是互补的!limit(n)是返回前面n个元素,skip(n)是跳过前n个元素。列如:下面的流满足谓词并跳过第一个元素,返回的元素是俩个2,4。


List<Integer> numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4);
numbers.stream().filter(i -> i % 2 == 0).skip(1).collect(toList());

版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/lambda%e8%a1%a8%e8%be%be%e5%bc%8fstream%e6%b5%81%e7%9a%84%e4%bd%bf%e7%94%a8/400/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>