我正在尝试使用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)));