lambda

不要畏惧lambda表达式以及方法引用的神秘语法,使用lambda表达式写出Java代码,你会发现更清晰的Java代码

警告(Caveats)

如果你不知道什么是函数式编程,或者不了解 map,filter,reduce 这些常用的高阶函数,那么建议你先了解函数式编程
百度 函数式编程

深入理解Java 8 Lambda

请参照这篇博客了解相关 深入理解Java 8 Lambda

下面为一个简单的函数式接口写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Chapter1 {
// 接口方法
interface Action{
void action(int i,int j);
}
// 调用方法 实际接口调用
private static void doAction(Action action){
// do something
}
public static void main(String[] args) {
// 调用
doAction(new Action() {
@Override
public void action(int i, int j) {
System.out.println(i + j);
}
});
// 匿名引用
doAction((int i,int j) ->
System.out.println( i * j)
);
}
}

了解常用的函数式接口

了解常用的函数式接口(java.util.function)

1
2
3
Predicate<T> ——接收 T 并返回 boolean
Consumer<T> ——接收 T,不返回值
Function<T, R> ——接收 T,返回 R

如何让自己的java代码更加优雅

用示例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public enum Action {
Payment(1),
Refund(2),
Reversal(3),
ChargeBach(4);
private final int value;
public int getValue() {
return value;
}
Action(int value) {
this.value = value;
}
// 一般做法
public static Action getCommon(int i){
for(Action action : Action.values()){
if(action.getValue() == 1){
return action;
}
}
return null;
}
// 使用lambda表达式
public static Action getLambda(int i){
return Arrays.stream(Action.values()) // stream
.filter(action -> action.getValue() == i) // match value
.findFirst() // find the first matcher
.orElseGet(null); // not matcher return null
}
}

一般流程

1
2
3
4
5
Collection.stream.foreach
Collection.stream.filter.find.get
Collection.stream.filter.foreach.collect
Collection.stream.map.filter.collect
Collection.stream.map.reduce

------ 本文结束 ------
支持鼓励