現在、Java 8のスキルを向上させようとしています。しかし、今私は理解していない次の問題に直面しています。"有効な"(?)ラムダ式の "voidメソッドは値を返すことができません"
はのは、次のコードの平和を想定してみましょう:
List<String> words = generateNewList();
words.stream().filter(w -> w.length() < 4).forEach(print());
今、私はfilter
方法で使用する代わりに、実際のメソッド呼び出しでラムダ式を書くことができる方法の参考としてラムダを作成したいです。私のアプローチは:
Consumer<String> shortFilter = w -> w.length() < 4;
words.stream().filter(shortFilter).forEach(print());
問題があり、Eclipseは私に言うw -> w.length() < 4
のエラーを示しています。
は、以下の変更削除しを引き起こす「ボイドメソッドが値を返すことはできませんが」エラー:
Consumer<String> shortFilter = w -> shorterThen4(w);
...
}
public boolean shorterThen4(String w) {
return w.length() < 4;
}
ありがとう、ヒントまたは発言してください。
*私のJavaラムダ構文-fuは弱いですが、確かに '.forEach(print());'は*呼び出して 'print()'を呼び出し、その戻り値を'forEach'? –
filter()メソッドは、Consumerではなく、Predicateを要求します。述語はブール値を返します。消費者は無効を返す。 –
[Consumer'のJavaDoc](http://docs.oracle.com/javase/8/docs/api/java/util/function/Consumer.html):* "単一の入力を受け入れる操作を表します引数**と結果を返しません。** "*(私の強調)。 –