java8新特性-lambda表达式和stream API的简单使用

一、为什么使用lambda

  Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

package com.duchong.java8;

/**
 * @author DUCHONG
 * @since 2019-01-02 15:00
 **/
public class LambdaTest2 {

    public static void main(String[] args) {

        //原写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("run ----hello lambda");
            }
        }).start();
        //lambda表达式写法
        new Thread(()-> System.out.println("run2 ----hello lambda")).start();
    }
}

二、lambda语法

  Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 "->", 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为两个部分:

  • 左侧:指定了 Lambda 表达式需要的所有参数
  • 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

三、引用

3.1、方法引用

3.2、构造器引用

3.3、数组引用

四、stream API简单使用

  包名:java.util.stream .*

需求:查询出集合中薪水大于5000 的员工。

Employee.java

package com.duchong.java8;

public class Employee {

    private String name;
    private int age;
    private char gender;
    private double salary;

    public Employee() {
    }

    public Employee(String name, int age, char gender, double salary) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + ", gender=" + gender
                + ", salary=" + salary + "]";
    }

}

main

package com.duchong.java8;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author DUCHONG
 * @since 2019-01-02 15:00
 **/
public class LambdaTest2 {

    public static void main(String[] args) {


        List<Employee> employees = Arrays.asList(
                new Employee("duchong", 18, '男', 0),
                new Employee("duchong", 17, '男', 0),
                new Employee("duchong1", 20, '女', 5000),
                new Employee("duchong2", 18, '女', 8000),
                new Employee("duchong3", 22, '男', 9000),
                new Employee("duchong4", 30, '男', 11000)
        );


        //过滤大于5000
        employees.stream()
                .filter((e) -> e.getSalary() >= 5000)
                .forEach(System.out::println);

        System.out.println("---------------------------------------");
        //获取名称 不去重
        employees.stream()
                .map(Employee::getName)
                .forEach(System.out::println);
        //获取名称 去重
        System.out.println("---------------------------------------");
        employees.stream()
                .map(Employee::getName)
                .distinct()
                .forEach(System.out::println);

        //获取唯一性的Name列表
        List<String> employeeList=employees.stream()
                                            .map(Employee::getName)
                                            .distinct()
                                            .collect(Collectors.toList());
    }
}

结果:

原文地址:https://www.cnblogs.com/geekdc/p/10208877.html