이 기사에서는 람다 표현식과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 람다 표현식은 Java 언어에서 **"->"** 연산자를 소개합니다. 이 연산자를 람다 연산자 또는 화살표 연산자라고 합니다. , 함께 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다
추천 학습: "java 비디오 튜토리얼"
우리는 Java에서 인터페이스는 인스턴스화할 수 없지만 인터페이스 객체는 구현 클래스 객체를 가리킬 수 있습니다. 인터페이스에 구현 개체가 없으면 어떻게 되나요? 다음과 같이 익명 클래스를 사용할 수도 있습니다.
public class JavaTest { public static void main(String[] args) { Fly fly = new Fly() { @Override public void fly(String name) { System.out.println(name + "飞行"); } }; fly.fly("张三"); }}interface Fly{ abstract void fly(String name);}
하지만 익명 내부 메서드를 사용하면 실제로 코드의 양이 그리 간결하지 않습니다. 이러한 기능을 보다 간단한 구문으로 구현하기 위해 람다 표현식을 사용하여 단순화된 코드는 다음과 같습니다. public class JavaTest {
public static void main(String[] args) {
Fly fly = name -> System.out.println(name + "飞行");
fly.fly("张三");
}}interface Fly{
abstract void fly(String name);}
2. 기능적 인터페이스
가 무엇인지 알아야 합니다. 한 가지 메소드만 구현하는 인터페이스를 기능적 인터페이스라고 합니다. //接口中只有一个待实现的方法 fly,所以这是函数式接口interface Fly{
void fly(String name);}//接口中有两个待实现的方法 这是不是函数式接口interface Run{
void fastRun();
void slowRun();}//接口中有两个方法,但其中一个是已经定义好的default方法,真正需要子类去实现的方法只有一个 这是函数式接口interface Jump{
void jump();
default void highJump(){
System.out.println("跳的更高");
}}
왜 기능적 인터페이스가 무엇인지 알아야 합니까? Lambda 표현식은 인터페이스의 익명 클래스 구현을 단순화하므로 기능적 인터페이스**에서만 작동합니다. 이는 이해하기 쉽습니다. 인터페이스에 구현할 메서드가 여러 개 있는 경우 Lambda 표현식은 현재 인터페이스에서 어떤 메서드를 구현하고 있는지 알 수 없습니다.
3. 람다 표현식 구문
오른쪽: 람다 본문, 즉 람다 표현식에서 수행할 함수를 구성합니다.
이렇게:(parameters) -> expression 或 (parameters) ->{ statements; }
interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } interface NoParam{ int returnOne(); }
다음은 람다 표현식의 중요한 기능입니다.
// 类型声明 MathOperation addition = (int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b;
// 不用括号 GreetingService greetService1 = message -> System.out.println("Hello " + message); // 用括号 GreetingService greetService2 = (message) -> System.out.println("Hello " + message);
// 多条语句不可以省略大括号 MathOperation multiplication = (int a, int b) -> { int num = a+1; num = a + b; return a * b + num; }; // 单条语句可以省略大括号 MathOperation pision = (int a, int b) -> a / b;
// 多条语句的Lambda表达式如果有返回值,需要使用return MathOperation multiplication = (int a, int b) -> { int num = a+1; num = a + b; return a * b + num; }; // 单条语句可以省略return MathOperation pision = (int a, int b) -> a / b;
MathOperation subtraction = (a, b) -> a - b;
interface MathOperation { int operation(int a, int b); } MathOperation getOperation(int a, int b){ return (a1, b1) -> a+b; }
MathOperation math[] = { (a,b) -> a+b, (a,b) -> a-b, (a,b) -> a*b };
public static void main(String args[]){ Java8Tester java8Tester = new Java8Tester(); java8Tester.operate(1,2,((a, b) -> a*b)); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } interface MathOperation { int operation(int a, int b); }
람다를 배우다 보면 다음과 같은 이상한 작성 방법을 발견할 수도 있습니다.
// 方法引用写法GreetingService greetingService = System.out::println; greetingService.sayMessage("hello world");
메서드를 호출하여
기능적 인터페이스 구현이 달성된 경우메서드 참조를 사용할 수 있습니다.
public class Java8Tester { public static void main(String args[]){ // 静态方法引用--通过类名调用 GreetingService greetingService = Test::MyNameStatic; greetingService.sayMessage("hello"); Test t = new Test(); //实例方法引用--通过实例调用 GreetingService greetingService2 = t::myName; // 构造方法方法引用--无参数 Supplier<test> supplier = Test::new; System.out.println(supplier.get()); } interface GreetingService { void sayMessage(String message); }}class Test { // 静态方法 public static void MyNameStatic(String name) { System.out.println(name); } // 实例方法 public void myName(String name) { System.out.println(name); } // 无参构造方法 public Test() { }}</test>
更少的代码行-lambda表达式的最大好处之一就是减少了代码量。我们知道,lambda表达式只能与功能接口一起使用。例如,Runnable 是一个接口,因此我们可以轻松地应用lambda表达式。
通过将行为作为方法中的参数传递来支持顺序和并行执行-通过在Java 8中使用Stream API,将函数传递给collection方法。现在,集合的职责是以顺序或并行的方式处理元素。
更高的效率-过使用Stream API和lambda表达式,可以在批量操作集合的情况下获得更高的效率(并行执行)。 此外,lambda表达式有助于实现集合的内部迭代,而不是外部迭代。
推荐学习:《java视频教程》
위 내용은 Java 예제의 람다 표현식에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!