Lambda는 선언되지 않은 함수입니다. 즉, 사용하기 위해 명시적으로 선언할 필요가 없습니다. 이름, 매개변수, 액세스 한정자 또는 반환 유형을 지정할 필요가 없습니다. 기본적으로 람다는 단일 메서드로 인터페이스를 구현하는 더 간단한 방법입니다.
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 파일을 생성하지 않습니다.
Lambda는 스레드 작업 시 자세한 정보를 줄여 코드를 단순화합니다.
// 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();
Lambda는 컬렉션의 정렬 및 필터링과 같은 기능을 단순화합니다.
// 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));
Lambda는 Observer 디자인 패턴을 구현하는 리스너의 코드를 단순화합니다.
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!