lambda 与 函数式接口 01
偶然遇到 LocalDate 的方法,真是太惊喜了,以前每次处理起 时间,日期 都要很头疼。当时真是烦人啊。学习过 LocalDate 后日期,与时间的处理感觉手到擒来啊,爱你 LocalDate 。学习过程中发现他是 jdk1.8 的新特性。您猜我又遇到了什么 lambda表达式 与 函数式编程 ,感觉刷新了我的世界,怎么可以这么好用呢,,,,,,,为什么我没早点看到啊。。。。可恶!!!!
那么什么是 lambda 与 函数式接口呢?
函数式接口的一个重要的作用是可以让方法作为参数传递给其他方法,从而实现更高阶的抽象和灵活性。例如:你可以使用函数式接口 Comparator 来定义不同的排序规则,然后传递给 Collections.sort() 方法,而不需要每次都重新写一个排序函数。
e.g:
@FunctionalInterface
public interface Sorter {
int compare(Student s1, Student s2);
}
//e.g 对学生进行一些 排序,过滤,转换 等可以使用 函数式接口来定义这些操作规则,然后用 lambda 表达式来实现他们
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("xnn",24,100));
students.add(new Student("hzx",100,10));
students.add(new Student("trh",22,50));
//之前我可能会这样写
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o2.getAge() - o1.getAge();
}
});
//写的有多有不好看,现在 lambda 永远的神!!!
Sorter byname = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(students,byname::compare);
System.out.println(students);
Sorter byage = (s1, s2) -> s1.getAge()-s2.getAge();
Collections.sort(students,byage::compare);
System.out.println(students);
}
lambda 表达式可以简化匿名内部类的书写,终于可以不用那种笨比方式了。当然 lambda 并不能取代所有的内名内部类,只
能取代匿名内部类的函数式接口(@FunctionInterface 只能有一个抽象方法)。
以前创建一个线程还得这样
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程开始");
}
}).start();
现在我只需要这样
new Thread(()-> System.out.println("线程开始")).start();
标签:函数,students,接口,Student,new,lambda From: https://www.cnblogs.com/iopasd/p/17580070.html