ラムダは宣言されていない関数です。つまり、使用するために明示的に宣言する必要はありません。名前、パラメータ、アクセス修飾子、戻り値の型を指定する必要はありません。基本的に、ラムダは単一のメソッドでインターフェイスを実装する簡単な方法です。
Java におけるラムダ関数の基本構文は次のとおりです。
(args) -> (body)
(int x, int y) -> { return x * y; } Aluno display = (Pessoa p) -> { System.out.println(p.idade); } () -> System.out.println(new Date()); () -> { return 25.789; } x -> x < 100;
中括弧は、関数本体に複数のステートメントが含まれる場合にのみ必要です。例:
(int x, int y) -> { return x * y; }
次のように記述できます:
(int x, int y) -> return x * y;
どちらの形式でも同じ結果が生成されます。
Lambda 関数はパラメーターを持つことも、まったく持たないこともできます。 Java がパラメータの型を推測するため、パラメータの型を省略することもできます。
(int x, int y) -> { return x * y; }
(x, y) -> { return x * y; }
() -> System.out.println(new Date());
return キーワードが使用されない場合、関数の戻り値の型は void:
として推論されます。
(a) -> this.x = a;
ラムダは匿名クラスとは異なることに注意することが重要です。これは、生成された .class ファイルで確認できます。匿名クラスとは異なり、ラムダは使用ごとに複数の .class ファイルを生成しません。
ラムダは、スレッドを操作する際の冗長性を減らすことでコードを簡素化します。
// Implementing the Runnable interface and creating a thread with it Runnable e = new Runnable() { public void run() { System.out.println(new Date()); } }; new Thread(e).start(); // The same implementation using a lambda expression Runnable e = () -> System.out.println(new Date()); new Thread(e).start(); // Even more concise new Thread( () -> System.out.println(new Date()) ).start();
ラムダは、コレクション内の並べ替えやフィルター処理などの関数を簡素化します。
// Print all elements in a list List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar"); for (String s : list) { System.out.println(s); } // Using lambdas list.forEach(s -> System.out.println(s)); // Lambda with multiple statements list.forEach(s -> { if (StringUtils.equals("Cesar", s)) { System.out.println(s); } }); // Conventional sorting Collections.sort(list, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); list.forEach(p -> System.out.println(p)); // Sorting using lambdas Collections.sort(list, (String s1, String s2) -> s1.compareTo(s2)); list.forEach(p -> System.out.println(p));
ラムダは、オブザーバー設計パターンを実装するリスナーのコードを簡素化します。
// Listening to an action on a button in a Swing window button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Some actions..."); } }); // Using lambdas button.addActionListener((e) -> { System.out.println("Some actions..."); });
ラムダ式をパラメーターとして渡すことで、ラムダを汎用関数で使用して問題を解決できます。
public class Main { /* * A method that tests a condition */ public static void testExpression(List<String> list, Predicate<String> predicate) { list.forEach(n -> { if (predicate.test(n)) { System.out.println(n); } }); } /* * Calling the method with a lambda */ public static void main(String[] args) { List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar"); // Prints "Cesar" if it exists testExpression(list, (n) -> StringUtils.equals("Cesar", n)); // Prints the entire list testExpression(list, (n) -> true); // Prints nothing testExpression(list, (n) -> false); } }
以上がJava のラムダの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。