欢迎访问宙启技术站
智能推送

JavaLambda表达式的简介与用法

发布时间:2023-06-25 16:33:39

Java Lambda表达式是Java 8中的新特性,它允许我们将函数作为方法参数(也就是函数式接口)来使用,并且产生更为简洁的代码。Lambda表达式使得代码更易读、易写,更加简洁明了,同时也促进了代码的重用性与可维护性。本文将介绍Lambda表达式的语法规则和用法,以及在Java开发中常用的Lambda表达式示例。

语法规则

Lambda表达式由三个部分组成:

1.(参数列表):可以为空,也可以包含一个或多个参数类型和名称。

2. ->符号:Lambda运算符,它表示参数列表与Lambda表达式主体的分隔符。它也可以叫做箭头符号。

3. Lambda表达式主体:可以是一个语句块,也可以是一个表达式。

Lambda表达式可以使用在函数式接口中,函数式接口中只有一个抽象方法,所以Lambda表达式可很方便地替换成一个方法体。

使用Lambda表达式的好处

1.简洁:Lambda表达式的语法简洁明了,省去了很多传统Java开发中繁琐的写法。

2.提升代码可读性:使用Lambda表达式不仅代码更简洁,还很容易加强代码的可读性。

3.提升代码的可维护性:Lambda表达式的简洁明了也可以可提升代码的可维护性,因为代码更加易于理解,修改与重构。

Lambda表达式示例

以下是一些常用的Lambda表达式示例:

1. Lambda表达式实现Runnable接口

通常,在Java中我们实现一个线程需要写一个新的类并实现一个Runnable 接口,并且实现它的run方法。但是使用Lambda表达式,我们可以通过我们向Thread 构造函数中传递一个 lambda表达式来创建一个线程。

例如,下面是使用Lambda表达式实现Runnable接口:

Runnable r = () -> {  
      System.out.println("Lambda expressions");  
};  

2. Lambda表达式实现Comparable接口

Java中的Arrays.sort()方法允许我们将数组排序。但是在对自定义对象进行排序时,我们需要让对象实现Comparable 接口。使用Lambda表达式,我们可以直接在sort()方法中定义比较器。

例如,考虑一个Person对象实现Comparable接口使用Lambda表达式的示例:

class Person implements Comparable<Person> {  
    private String firstName, lastName;  
  
    public Person(String firstName, String lastName) {  
        this.firstName = firstName;  
        this.lastName = lastName;  
    }  
    
    public String getFullName() {  
        return firstName + " " + lastName;  
    }  
  
    @Override  
    public int compareTo(Person other) {  
        return firstName.compareTo(other.firstName);  
    }  
}  

  
public class LambdaExample {  
    public static void main(String[] args) {  
        List<Person> people = Arrays.asList(  
                new Person("Joe", "Smith"),  
                new Person("Alice", "Jones"),  
                new Person("Bob", "Johnson")  
                );  

        Collections.sort(people, (p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()));  
        people.forEach(person -> System.out.println(person.getFullName()));  
    }  
}  

3. Lambda表达式实现Supplier接口

Java中的Supplier接口用于提供一个生成数据的方法(对象)。我们可以使用Lambda表达式很方便地实现Supplier接口。

例如,一个随机生成数字的示例:

public class LambdaExample {  
    public static void main(String[] args) {  
        Supplier<Double> randomSupplier = () -> Math.random();  
        for (int i = 0; i < 5; i++) {  
            System.out.println(randomSupplier.get());  
        }  
    }  
}  

4. Lambda表达式实现Consumer接口

Java中的Consumer接口用来对带有参数的方法执行操作。使用Lambda表达式很容易地实现Consumer接口。

例如,下面是一个将字符串转换为大写的示例:

public class LambdaExample {  
    public static void main(String[] args) {  
        Consumer<String> toUpperCase = (s) -> System.out.println(s.toUpperCase());  
        List<String> names = Arrays.asList("John", "Jamie", "Sarah");  
        names.forEach(toUpperCase);  
    }  
}  

5. Lambda表达式实现Predicate接口

Java中的Predicate接口用来对某个对象做出固定的判断操作,其返回类型是一个布尔值。

例如,考虑一个在列表中查找特定文本值的示例:

public class LambdaExample {  
    public static void main(String[] args) {  
        Predicate<String> containsFred = (s) -> s.contains("Fred");  
        List<String> names = Arrays.asList("Bob", "Jamie", "Sarah", "Fred");  
        names.stream().filter(containsFred).forEach(System.out::println);  
    }  
}  

总结

本文介绍了Java Lambda表达式的语法规则以及在Java开发中的常用示例。使用Lambda表达式还有很多其他的用法,例如将Lambda表达式与Stream API一起使用。Lambda表达式简化了Java开发的很多操作,使得我们可以写出更简洁、更可读、更容易维护的代码。因此,在Java开发中使用Lambda表达式是一个不错的选择。