【Java lambda表达式详解】

在Java编程中,我们经常会遇到需要实现一个接口或者继承一个类的情况。然而,有时候我们并不需要一个完整的类来实现这个接口,而是只需要一个简单的功能。这时候,我们就可以使用Java 8引入的Lambda表达式。本文将介绍Lambda表达式的基本概念、优点以及通过具体例子来分析其简洁性。

目录

1.介绍

2.Lambda表达式的优点

1.简洁

2.易于并行计算

3.提高代码可读性

Lambda表达式可以使代码更容易理解,特别是对于函数式编程的新手来说。

3.推导

总结


1.介绍

咱们首先来说说 Lambda 这个名字,Lambda 并不是一个什么的缩写,它是希腊第十一个字母 λ 的读音Lambda表达式是一种简洁的表示匿名函数的方法,它允许我们将函数作为参数传递给其他方法或者作为返回。

2.Lambda表达式的优点

1.简洁

Lambda表达式允许我们以简洁的方式表示函数式接口(有且仅有一个抽象方法的接口)。这使得我们可以在一行代码中定义一个简单的方法,而不需要编写一个完整的类,因此代码显得更加简洁明了。

2.易于并行计算

Lambda表达式可以与Java 8引入的Stream API一起使用,以便轻松地对集合进行并行处理。通过将数据分割成多个部分,并在不同的线程上执行操作,我们可以充分利用多核处理器的性能。

import java.util.Arrays;
import java.util.List;

public class ParallelComputingExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        int sumOfSquares = numbers.parallelStream()
                .filter(n -> n % 2 == 0)
                .map(n -> n * n)
                .sum();

        System.out.println("Sum of squares of even numbers: " + sumOfSquares);
    }
}
 
 

在这个例子中,我们首先创建了一个包含1到10的整数列表。然后,我们使用parallelStream()方法创建一个并行流。接下来,我们使用filter()方法筛选出偶数,然后使用map()方法计算每个偶数的平方。最后,我们使用sum()方法计算所有平方的和。

3.提高代码可读性
Lambda表达式可以使代码更容易理解,特别是对于函数式编程的新手来说。

3.推导

接下来我们按照这个顺序来体会lambda表达式的简洁性。

 

 先创建一个接口

interface lambda{
    void test();
}

 创建外部类实现接口

class demo1 implements lambda{
    @Override
   public  void test(){
        System.out.println("hello lambda!!!");
    }
}

调用接口

public class Main {
    public static void main(String[] args) {
       lambda test = new demo1();
       test.test();

    }

}

把实现类写在外面有点麻烦,我们对代码进行优化,用静态内部类来实现接口

public class Main {

   public static class demo1 implements lambda{
        @Override
        public  void test(){
            System.out.println("hello lambda!!!");
        }
    }

    public static void main(String[] args) {
       lambda test = new demo1();
       test.test();

    }

}
interface lambda{
    public void test();
}

运行结果也是正确的,接下来再进一步优化,使用局部内部类

public class Main {
    
    public static void main(String[] args) {
        class demo1 implements lambda {
            @Override
            public void test() {
                System.out.println("hello lambda!!!");
            }
        }

        lambda test = new demo1();
        test.test();

    }

}
interface lambda {
    public void test();
}

代码还可以再优化,这次我们连类名都不要,直接用匿名内部类

public class Main {

    public static void main(String[] args) {
        lambda test = new lambda() {
            @Override
            public void test() {
                System.out.println("hello lambda!!!");
            }
        };
        test.test();

    }

}
interface lambda {
    public void test();
}

实现类已经没有名字了,那还能再优化吗?Java 8引入的Lambda表达式还能继续优化,直接把接口名和方法名都扔掉(就是这么任性)

public class Main {

    public static void main(String[] args) {
        lambda test = ()->{
                System.out.println("hello lambda!!!");
            };
        test.test();

    }

}
interface lambda {
    public void test();
}

代码是不是简单了许多,直接用()->代替接口名和方法名;其实代码还可再优化

如果方法内只有一个语句花括号都可以不要

  lambda test = ()->
                System.out.println("hello lambda!!!");
        test.test();

lambda表达式是可以传参的,如果只有一个参数,括号也可以不要

public class Main {

    public static void main(String[] args) {

        lambda test = a->
                System.out.println("hello lambda!!!");
        test.test(520);

    }

}
interface lambda {
    public void test(int a);
}

可以看到,使用Lambda表达式之后,我们的代码变得更加简洁和清晰,而且也更容易阅读和维护。

总结

 本文介绍了Java 8中的Lambda表达式,包括其基本概念、优点以及通过具体例子来分析其简洁性。通过使用Lambda表达式,我们可以简化代码、提高代码可读性以及方便地进行并行处理。希望本文能帮助大家更好地理解和使用Java中的Lambda表达式。

猜你喜欢

转载自blog.csdn.net/weixin_55939638/article/details/134562516