"Void methods cannot return a value" for 'valid'(?) 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的错误,该错误说:" 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文档,以了解如何使用两个功能接口。

我希望这会有所帮助!

最新更新