• 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());
        }
    }

    结果:

  • 相关阅读:
    NIO(二)
    前端面试题整理及答案
    win10休眠后屏幕唤不醒
    Python 将多个列表相同索引的元素进行拼接并输出
    Airtest 常用方法
    windows 各种巨强工具包
    mysql 主从数据同步配置
    windows 10 21H1 顶部任务栏点击音量或其他图标不出弹框
    html5 tts(文字朗读)
    为 map 中不存在的 key 提供缺省值
  • 原文地址:https://www.cnblogs.com/geekdc/p/10208877.html
Copyright © 2020-2023  润新知