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; } }