我正在尝试用lambda制作一个过滤器.有一个字符串列表,其中包含应该排序的值,还有另一个列表,其中包含不同的值(即应该过滤的值).所以我一直想做的是:
stringList = stringList.stream() .filter(e ->toBeSortedOutList.forEach(outSorted->!e.startsWith(outSorted))) .collect(Collectors.toList());
不幸的是,我总是得到错误,布尔值无法转换为void.所以我想知道的是,为什么我得到这个错误,如果可以通过迭代通过列表并使用其值来过滤器进行过滤?谢谢你的回答!
用途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)));