Java8 中Lambda介绍
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
示例如下
Java8Tester tester = new Java8Tester();
// 类型声明
MathOperation addition = (int a, int b) -> a + b;
// 不用类型声明
MathOperation subtraction = (a, b) -> a - b;
// 大括号中的返回语句
MathOperation multiplication = (int a, int b) -> { return a * b; };
// 没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b;
System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
System.out.println("10 / 5 = " + tester.operate(10, 5, division));
// 不用括号
GreetingService greetService1 = message ->
System.out.println("Hello " + message);
// 用括号
GreetingService greetService2 = (message) ->
System.out.println("Hello " + message);
greetService1.sayMessage("Runoob");
greetService2.sayMessage("Google");
}
interface MathOperation {
int operation(int a, int b);
}
interface GreetingService {
void sayMessage(String message);
}
private int operate(int a, int b, MathOperation mathOperation){
return mathOperation.operation(a, b);
}
java7 和Java8中Collections.sort的实现
java 7 中实现对象的排序是有两种方式,一种是在类定义的时候实现Comparable接口,另一种是匿名内部类的方式
第一种方式,在类定义的时候实现Comparable接口的代码实现
public class Student implements Comparable<Student>{
private Integer id;
private String name;
public Student(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Student student) {
// TODO Auto-generated method stub
return this.id.compareTo(student.getId());
}
public static void main(String[] args) {
Student a = new Student(1,"zhangsan");
Student b = new Student(9,"lisi");
Student c = new Student(5,"wangwu");
List<Student> stuList = new ArrayList<Student>();
stuList.add(a);
stuList.add(b);
stuList.add(c);
Collections.sort(stuList);
for(Student student : stuList){
System.out.println("student.id " + student.getId() + "student.name" + student.getName());
}
}
第二种匿名内部类的方式
public class Student2{
private Integer id;
private String name;
public Student2(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Student2 a = new Student2(1,"zhangsan");
Student2 b = new Student2(9,"lisi");
Student2 c = new Student2(5,"wangwu");
List<Student2> stuList = new ArrayList<Student2>();
stuList.add(a);
stuList.add(b);
stuList.add(c);
Collections.sort(stuList, new Comparator<Student2>(){
@Override
public int compare(Student2 stu1,Student2 stu2) {
// TODO Auto-generated method stub
return stu1.getId().compareTo(stu2.getId());
}
});
for(Student2 student : stuList){
System.out.println("student.id " + student.getId() + "student.name" + student.getName());
}
}
}
上面的匿名内部类在java8中可以通过Lambda代替
Collections.sort(lists, (Student2 stu1,Student2 stu2)->{
return stu2.compareTo(stu1);
})
//或者
Collections.sort(lists, (Student2 stu1,Student2 stu2) -> stu1.compareTo(stu2));
//或者
Collections.sort(id, (stu1, stu2) -> stu2.compareTo(stu1));