lambda出现原因
在Java8之前是无法将方法赋值给一个变量的。Java8的一个重大特性就是引入了函数式编程,也就是变量可以被赋值为方法了,方法可以当作方法的参数和返回值,这就叫做函数式编程!
Java提供了四种函数式接口来定义函数变量,函数式接口对象通过初始化匿名内部类来实现。
| 名字 | type | 描述 |
|---|---|---|
| Function | Function< T , R > | 方法接受T对象,返回R对象 |
| Consumer | Consumer< T > | 方法接受T对象,不返回对象 |
| Supplier | Supplier< R > | 方法不接受对象,返回R对象 |
| Predicate | Predicate< T > | 方法接受T对象,返回boolean |
下面是具体代码
Function<String,String> function = new Function<String, String>() {
@Override
public String apply(String s) {
return s+s;
}
};
Supplier<Integer> supplier1 = new Supplier<Integer>() {
@Override
public Integer get() {
return 1;
}
};
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
Predicate<String> predicate = new Predicate<String>() {
@Override
public boolean test(String s) {
if (s.equals("test")) return true;
return false;
}
};
有了函数式接口,需要实现匿名内部类,构造比较麻烦啊,这时lambda就出现用场了。
lambda的名称叫做匿名函数,是一种表达函数的方式,十分简洁。
lambda用法
(parameters) -> expression
或
(parameters) ->{ statements; }
Function<String,String> f1 = (String s)->{return s+s;};
Supplier<Integer> s1 = ()->1;
Consumer<String> c1 = s->System.out.println(s);
Predicate<String> p1 = (s)->{
if(s.equals("test")){
return true;
};
return false;
};
从上述代码可以看出,lambda可以极大的简洁函数的定义。
parameters是参数列表,当只有一个参数的时候,可以省略()
expression是返回值。
statements是代码语句,当statements只有一行的时候,可以省略{}。
版权声明:本文为qq_40276626原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。