java8新特性 - lambda
1. lambda表达式的形式
(parameters)-> expression
(parameters)-> {statement; }
形式一:没有参数
()-> System.out.println("Hello World!");
形式二:只有一个参数
name -> System.out.println("Hello World from" + name + " !");
形式三:没有参数,逻辑复杂
()-> {
System.out.println(" Hello");
System.out.println(" World");
}
形式四:包含两个参数的方法
BinaryOperator<Long> functionAdd = (x,y) -> x + y;
functionAdd.apply(10L, 20L);
形式五:对参数显示声明
BinaryOperator<Long> functionAdd = (Long x,Long y) -> x + y;
functionAdd.apply(10L, 20L);
2.函数接口
- 条件:接口只有一个抽象方法
- java8的函数式接口注解:@FunctionalInterface
- 函数式接口的抽象方法签名:函数描述符
3.常用函数接口及使用
4.方法引用
定义
调用特定方法的lambda表达式的一种快捷写法,可以让你重复使用的方法定义,
并像lambda表达式一样传递他们
三种表现方法
(1)指向静态方法的方法引用
/**
* (args) -> ClassName.staticMethod(args);
* ClassName::staticMethod
*/
public void test1() {
Consumer<String> consumer =
(String number) -> Integer.parseInt(number);
Consumer<String> consumer2 = Integer::parseInt;
}
(2)指向任意类型实例方法的方法引用
/**
* (args) -> args.instanceMethod;
* ClassName::instanceMethod;
*/
public void test2() {
Consumer<String> consumer =
(String str) -> str.length();
Consumer<String> consumer2 =
String::length;
}
(3)指向现有对象的实例方法的方法引用
/**
* (args) -> object.instanceMethod(args);
* object::insatanceMethod;
*/
public void test3() {
StringBuilder buffer = new StringBuilder();
Consumer<String> consumer =
(String str) -> buffer.append(str);
Consumer<String> consumer2 = buffer::append;
}