Java8新特性-- Lambda表达式
Lambda表达式(也称为闭包)是整个Java 8发行版中最受期待的在Java语言层面上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。
一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示:
//打印列表中的元素
Arrays.asList( 1, 2, 3 ).forEach( e -> System.out.println( e ) );
上述例子中e的类型是由编译器猜测的,也可以指定e的参数类型,例如:
//打印列表中的元素
Arrays.asList( 1, 2, 3 ).forEach((int) e -> System.out.println( e ) );
更复杂的表达式,达式可为一个函数体,在{}中编写,例如:
//打印列表中的元素
Arrays.asList( 1, 2, 3 ).forEach(e -> {
//表达式可为一个函数体,在{}中编写,如赋值x并打印x
int x = e + 1;
System.out.println( x );
} );
日常工作中,常用lambda表达式对list排序,比如,我有一个UserVO,有姓名和年龄两个属性,我需要对查出来的user集合按年龄大小进行排序,就可以使用lambda表达式,废话不多说,直接上代码:
//TestUserVO
public class TestUserVO implements Serializable {
private String name ;
private int age;
public TestUserVO (String name ,int age){
this.name = name;
this.age = age ;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "TestUserVO{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//测试类
public class Test {
public static void main(String [] args){
TestUserVO b = new TestUserVO("b",1);
TestUserVO c = new TestUserVO("b",10);
TestUserVO d = new TestUserVO("d",3);
TestUserVO e = new TestUserVO("e",20);
userList.add(b);
userList.add(c);
userList.add(e);
userList.add(d);
//按年龄倒序排列(e1,e2)->e2.compare(e1),如果想按照正序排列则(e1,e2)->e1.compare(e2)
userList.sort((e1, e2)->((Integer)e2.getAge()).compareTo(((Integer) e1.getAge())));
userList.forEach(x->System.out.println(x.toString()));
}
}
执行结果如下
感谢浏览!!