importjava.io.Serializable;importjava.util.ArrayList;importjava.util.List;public classDemo1 {public static voidmain(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=newUser();
user1.setName("王一");
user1.setAge(10);
user1.setSex("女");
User user2=newUser();
user2.setName("王二");
user2.setAge(20);
user2.setSex("男");
User user3=newUser();
user3.setName("王三");
user3.setAge(30);
user3.setSex("女");
List users=new ArrayList();
users.add(user1);
users.add(user2);
users.add(user3);//查询年龄在15-30之间的用户
List res=User.userFilter(users, user->user.getAge()>15&&user.getAge()<30);
System.out.println("年龄在15-30之间的用户:"+res);//查询性别是女的用户
List res2=User.userFilter(users, user->user.getSex().equals("女"));
System.out.println("性别是女的用户:"+res2);//查询年龄在15-30之间的用户--泛型
List res3=FuncInterfaceTWarp.filterT(users,t->((User)t).getAge()>15&&((User)t).getAge()<30);
System.out.println("年龄在15-30之间的用户--泛型:"+res3);//查询性别是女的用户--泛型
List res4=FuncInterfaceTWarp.filterT(users,t->((User)t).getSex().equals("女"));
System.out.println("性别是女的用户--泛型:"+res4);
}
}/*** 用户实体
**/
class User implementsSerializable{private static final long serialVersionUID = 1L;privateString name;privateInteger age;privateString sex;publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}publicString getSex() {returnsex;
}public voidsetSex(String sex) {this.sex =sex;
}
@OverridepublicString toString() {return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}public static List userFilter(Listusers,FuncInterface funcInterface){
List res=new ArrayList();for(User user:users){if(funcInterface.execute(user)){
res.add(user);
}
}returnres;
}
}/*** 定义函数式接口
*@authorAdministrator
**/@FunctionalInterfaceinterfaceFuncInterface{booleanexecute(User user);
}/*** 定义泛型函数式接口
**/@FunctionalInterfaceinterface FuncInterfaceT{booleanexecute(T t);
}/*** 定义泛型函数式接口包装类
**/
classFuncInterfaceTWarp{public static List filterT(List objs,FuncInterfaceTfuncInterfaceT){
List res=new ArrayList<>();for(T t:objs){if(funcInterfaceT.execute(t)){
res.add(t);
}
}returnres;
}
}