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