import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
// 使用lambda表达式,如runnable
Thread th1 = new Thread(() -> {
System.out.println("lambda 创建线程"+Thread.currentThread().getName());
});
th1.start();
/* 1、说明:()->{} 这里的()是参数列表,{}是执行主体,->分割参数列表和执行主体
* 2、那么什么函数可以使用lambda表达式呢?
* 答:函数式接口。
* 3、什么是函数式接口?
* 答:只定义一个抽象方法的接口。比如Runnable、Callable、Comparator
* 4、如何检查函数式接口?
* 答:JDK8中提供了@FunctionInterface注解来专门表示函数式接口,用来对接口的声明进行语法检查。
*/
//自定义函数式接口
User user1=new User();
user1.setName("王一");
user1.setAge(10);
user1.setSex("女");
User user2=new User();
user2.setName("王二");
user2.setAge(20);
user2.setSex("男");
User user3=new User();
user3.setName("王三");
user3.setAge(30);
user3.setSex("女");
List<User> users=new ArrayList<User>();
users.add(user1);
users.add(user2);
users.add(user3);
//查询年龄在15-30之间的用户
List<User> res=User.userFilter(users, user->user.getAge()>15&&user.getAge()<30);
System.out.println("年龄在15-30之间的用户:"+res);
//查询性别是女的用户
List<User> res2=User.userFilter(users, user->user.getSex().equals("女"));
System.out.println("性别是女的用户:"+res2);
//查询年龄在15-30之间的用户--泛型
List<User> res3=FuncInterfaceTWarp.filterT(users,t->((User)t).getAge()>15&&((User)t).getAge()<30);
System.out.println("年龄在15-30之间的用户--泛型:"+res3);
//查询性别是女的用户--泛型
List<User> res4=FuncInterfaceTWarp.filterT(users,t->((User)t).getSex().equals("女"));
System.out.println("性别是女的用户--泛型:"+res4);
}
}
/**
* 用户实体
*
*/
class User implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
public static List<User> userFilter(List<User> users,FuncInterface funcInterface){
List<User> res=new ArrayList<User>();
for(User user:users){
if(funcInterface.execute(user)){
res.add(user);
}
}
return res;
}
}
/**
* 定义函数式接口
* @author Administrator
*
*/
@FunctionalInterface
interface FuncInterface{
boolean execute(User user);
}
/**
* 定义泛型函数式接口
*
*/
@FunctionalInterface
interface FuncInterfaceT<T>{
boolean execute(T t);
}
/**
* 定义泛型函数式接口包装类
*
*/
class FuncInterfaceTWarp{
public static <T>List<T> filterT(List<T> objs,FuncInterfaceT<T> funcInterfaceT){
List<T> res=new ArrayList<>();
for(T t:objs){
if(funcInterfaceT.execute(t)){
res.add(t);
}
}
return res;
}
}