当前位置:  开发笔记 > 编程语言 > 正文

带有lambda的Java过滤器

如何解决《带有lambda的Java过滤器》经验,为你挑选了1个好方法。

我正在尝试用lambda制作一个过滤器.有一个字符串列表,其中包含应该排序的值,还有另一个列表,其中包含不同的值(即应该过滤的值).所以我一直想做的是:

stringList = stringList.stream()
       .filter(e ->toBeSortedOutList.forEach(outSorted->!e.startsWith(outSorted)))
       .collect(Collectors.toList());

不幸的是,我总是得到错误,布尔值无法转换为void.所以我想知道的是,为什么我得到这个错误,如果可以通过迭代通过列表并使用其值来过滤器进行过滤?谢谢你的回答!



1> Tagir Valeev..:

用途noneMatch:

stringList = stringList.stream()
   .filter(e ->toBeSortedOutList.stream().noneMatch(outSorted->e.startsWith(outSorted)))
   .collect(Collectors.toList());

通常避免使用,forEach除非您需要明确的副作用(如输出System.out).通常有更好的替代方案来解决您的问题.

顺便说一句,您还可以使用removeIf以下方法就地修改列表:

stringList.removeIf(e -> toBeSortedOutList.stream()
                         .anyMatch(outSorted->e.startsWith(outSorted)));


`outSorted-> e.startsWith(outSorted))`也可以表示为方法引用`e :: startsWith`
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有