Java Lambda 表达式是一种匿名函数;它是没有声明的方法,即没有访问修饰符、返回值声明和名字。
传递行为,而不仅仅是值。
Java 中的 Lambda 表达式基本语法(左边是参数,右边是匿名函数的具体实现)
(argument) -> {body}
比如说
(arg1, arg2...) -> {body}
(type1 arg1, type2 arg2...) -> {body}
Lambda 示例说明
// 参数为 a,b ,返回 a+b
(int a, int b) -> {return a + b;}
// 无参数,打印 Hello World
() -> System.out.println("Hello World");
// 参数为 s,打印 s 值
(String s) -> {System.out.println(s);}
// 无参数,返回 42
() -> 42
// 无参数,返回 3.14
() -> {return 3.14}
a -> {return a*a}
lambda 的类型是由上下文信息来断定的 // lambda 的类型就是 String String s1 = () -> {};
return
返回值的要去掉 return
。匿名函数的返回类型与该主体表达式一致一个完整的例子:遍历 list
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
for (int number: numbers) {
System.out.println(number);
}
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(new Consumer<Integer>(){
public void accept(Integer value) {
System.out.println(value);
}
})
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(Integer value) -> System.out.println(value);
List<Integer> number = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(value -> System.out.println(value));
forEach 接口是函数式接口。
List<Integer> number = Arrays.asList(1, 2, 3, 4, 5, 6);
// method reference
numbers.forEach(System.out::println);
通过方法引用的方式创建函数式接口的实例。
外部迭代和内部迭代区别: 外部迭代需要一个迭代器对象,内部迭代List本身就可以完成。
PS:
发现用 compareTo
方法结合 lambda 表达式来进行数组反转实在是太好用了,哈哈哈:
List<String> list = Arrays.asList("zhangsan", "lisi", "wangwu", "zhaoliu");
// 匿名内部类
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
// lambda 表达式
Collections.sort(list, (o1, o2) -> o2.compareTo(o1));