lambda表达式的学习使用

package com.example.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

/**
 * lambda的测试
 * lambda表达式无法单独出现,它是函数式接口的实现
 * 函数式接口:一个接口中只含有一个方法,可在接口上加注解@FunctionalInterface(不是必须)
 */
public class LambdaTest {
    public static void main(String[] args) {
        /**
         * 1.lambda基本语法
         * ()->单行代码语句
         * (param)-单行代码语句,param为参数
         * ()->{多行代码语句}
         * (param)->{多行代码语句},param为参数
         */
        Runnable runnable = () -> System.out.println("执行了run方法!");
        Runnable runnable1 = () -> {
            System.out.println("测试测试");
            System.out.println("测试测试");
        };
        //new Thread(runnable).start();
        //new Thread(runnable1).start();

        /**
         * 2.方法引用
         * 当方法体中的代码过长,影响代码阅读性时,可用方法引用
         * 静态方法,ClassName::MethodName,例:Object::equals
         * 实例方法,Intance::MethodName,例:Object obj=new Object();obj::MethodName
         * 构造方法,ClassName::new
         */
        Runnable runnable2 = LambdaTest :: run;
        //new Thread(runnable2);

        /**
         * 3.集合中内部迭代
         */
        List<User> users = new ArrayList<>();
        users.add(new User("jack",22));
        users.add(new User("tom",18));
        users.forEach((User u)-> System.out.println(u.getName() + ":" + u.getAge()));

        /**
         * 4.Stream(流) API
         * 中间方法返回的永远是Stream
         * 最终方法返回的最终结果
         */
        Stream<User> stream = users.stream();
        //过滤大于age大于20的,filter为中间方法
        //stream.filter((User u) -> u.getAge() > 20);

        //所有的年龄大于20岁的User对象,转换为字符串50对象。现在流中只有字符串对象了。map为中间方法
        //stream.filter((User u) -> u.getAge() > 20).map((User u)->{return "50";});

        //返回流中的元素个数,count为最终方法
        Long count = stream.filter((User u) -> u.getAge() > 20).map((User u)->{return "50";}).count();
        System.out.println(count);
    }

    public static void run(){
        System.out.println("执行了执行了该方法");
    }

    public LambdaTest(){
        System.out.println("执行了构造方法");
    }

}

class User{
    private String name;
    private Integer age;

    public User(String name, Integer age){
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return name;
    }
    public Integer getAge(){
        return  age;
    }
}

猜你喜欢

转载自www.cnblogs.com/jcb1991/p/13391887.html
今日推荐