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