" Void方法无法返回值" for'有效'(?)lambda表达式

时间:2016-12-10 14:33:29

标签: java lambda

我目前正在尝试提高我的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;
}

感谢您的任何想法,提示或评论。

1 个答案:

答案 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());

您可能希望查看PredicateConsumer的Java文档,以了解更多如何使用这两种功能接口。

我希望这有帮助!