我目前试图提高我的Java 8技能。但是现在我面临以下我不明白的问题。
让我们假设以下代码和平:
List<String> words = generateNewList();
words.stream().filter(w -> w.length() < 4).forEach(print());
现在,我想创建一个lambda作为方法参考,可以在filter
方法中使用,而不是在方法调用中实际编写lambda表达式。我的方法是:
Consumer<String> shortFilter = w -> w.length() < 4;
words.stream().filter(shortFilter).forEach(print());
问题是,Eclipse向我展示了w -> w.length() < 4
的错误,该错误说:" void方法无法返回值"
它只是让我感到困惑,导致以下更改消除了错误:
Consumer<String> shortFilter = w -> shorterThen4(w);
...
}
public boolean shorterThen4(String w) {
return w.length() < 4;
}
感谢您的任何想法,提示或备注。
您需要的是将lambda表达式分配给谓词而不是消费者,因为正如JB Nizet所说的那样 - 谓词返回布尔值,消费者返回void。
。Predicate<String> isLessThan4 = w -> w.length() < 4;
List<String> words = generateNewList();
words.stream().filter(isLessThan4).forEach(print());
您可能想查看谓词和消费者的Java文档,以了解如何使用两个功能接口。
我希望这会有所帮助!