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

10-08 08:40