Lambda で Comparator.reversed() が失敗する理由
ラムダ式と Comparator.comparing を使用して User オブジェクトのリストを並べ替える場合、エラーが発生する可能性があります:
userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error
これは制限によるものですコンパイラの型推論メカニズム内。コンパイラは、ラムダ引数 'u' の型を判断するのに苦労します。
次の例では、メソッド参照を使用することで、コンパイラがターゲットの型を推測してエラーを回避できます。
userList.sort(Comparator.comparing(User::getName).reversed()); // works
メソッド参照は、コンパイラが User として 'u' の型を推論するために使用する追加の型情報を提供します。
次の場合のエラーを回避するにはラムダを使用すると、ラムダ引数の型を明示的に指定できます。
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
将来のコンパイラ リリースでは、この問題は解決され、エラーは発生しなくなる可能性があります。
以上がJava ソートのラムダ式で「Comparator.reversed()」が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。