我目前正在尝试提高我的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
的错误,其中包含:&#34; Void方法无法返回值&#34;
它让我感到更加困惑,因为以下更改会删除错误:
Consumer<String> shortFilter = w -> shorterThen4(w);
...
}
public boolean shorterThen4(String w) {
return w.length() < 4;
}
感谢您的任何想法,提示或评论。
答案 0 :(得分:0)
你需要的是将lambda表达式分配给Predicate而不是Consumer,因为正如JB Nizet评论的那样 - 一个Predicate返回一个布尔值,一个Consumer返回void。
Predicate<String> isLessThan4 = w -> w.length() < 4;
List<String> words = generateNewList();
words.stream().filter(isLessThan4).forEach(print());
您可能希望查看Predicate和Consumer的Java文档,以了解更多如何使用这两种功能接口。
我希望这有帮助!