什么是lambda表达式:lambda expression
Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction)
Lambda表达式是一个匿名函数,即没有函数名的函数。
Lambda表达式可以表示闭包
----百度百科
lambda表达式语法:
(parameters) -> expression
(parameters) ->{ statements; }
lambda表达式的重要特征:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
lambda表达式的作用:
替代匿名内部类:即匿名内部类实现方式的简写(个人理解)
以更简洁的方式替换方法参数中的匿名内部类(一般参数为常用函数式接口的匿名内部类)
lambda表达式使用示例:
list集合遍历:
//定义list集合
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
//方式1:传统方法对list集合进行遍历
for (String s : names) {
System.out.println(s);
}
方式2、3为同种方法//
//方式2:Lambda表达式对list集合进行遍历
names.forEach(name -> System.out.println(name));
names.forEach(System.out::println); //更简洁的写法
//方式3:Lambda表达式对list集合进行遍历
Consumer<String> consumer = name -> System.out.print(name);
names.forEach(consumer);
///体现出lambda表达式实际是替代匿名内部类的作用//
//方式4:匿名内部类方式对list集合进行遍历
names.forEach(new Consumer<String>() {
@Override
public void accept(String name) {
// 匿名内部类方式实现list集合遍历
System.out.println(name);
}
});
map集合遍历:
//定义map集合
Map<Integer, String> map = new HashMap<Integer,String>();
map.put(1, "peter");
map.put(2, "anna");
map.put(3, "mike");
map.put(4, "xenia");
//方式1:传统方法遍历map集合 map.keySet() map.values() map.entrySet()
for (Integer key : map.keySet()) {
System.out.println("key: " + key);
System.out.println("value: " + map.get(key));
}
System.out.println("====================");
//方式2:Lambda表达式对map集合进行遍历
map.forEach((k,v) -> {
System.out.println("key:" + k);
System.out.println("value:" + v);
});
System.out.println("====================");
//方式3:Lambda表达式对map集合进行遍历
BiConsumer<Integer,String> biConsumer = (k,v) ->{
System.out.print("key:" + k + " ");
System.out.print("value:" + v + "===");
//结果:key:1 value:peter===key:2 value:anna===key:3 value:mike===key:4 value:xenia===
};
map.forEach(biConsumer);
System.out.println("====================");
//方式4:匿名内部类方式对map集合进行遍历
map.forEach(new BiConsumer<Integer, String>() {
@Override
public void accept(Integer k, String v) {
System.out.println("key:" + k);
System.out.println("value:" + v);
}
});
集合排序:
//定义list集合
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
//Lambda表达式对list集合进行排序
Collections.sort(names, (a,b) -> b.compareTo(a));
/体现出lambda表达式实际是替代匿名内部类的作用//
//匿名内部类方式对list集合进行排序
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) {
//匿名内部类方式实现集合排序
return b.compareTo(a);
}
});