File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ # java中stream使用规范
2
+
3
+ ## 1. stream中的filter表达式不要写得太长,对于复杂的表达式建议封装方法;
4
+
5
+ 例如:
6
+
7
+ ``` java
8
+ List<FlightOrder > orders = orders. stream()
9
+ .filter(order - > StringUtils . equals(order. status, " Submitted" )
10
+ && StringUtils . equals(order. paymentStatus, " Billed" )
11
+ && StringUtils . equals(order. authorizeStatus, " Passed" ))
12
+ .collect(Collectors . toList();
13
+ ```
14
+
15
+ 可以重构为
16
+
17
+ ```java
18
+ List<FlightOrder > orders = orders. stream()
19
+ .filter(this :: orderCanTicketing)
20
+ .collect(Collectors . toList();
21
+ ```
22
+
23
+ ## 2. 不要嵌套使用stream,嵌套的steam可读性很差,建议将内层的stream封装成独立的方法;
24
+
25
+ ## 3. stream要适当地换行,不要写在一行中;
26
+
27
+ ## 4. 不要在stream中访问数据库;
28
+
29
+ 原因: 在循环中访问数据库往往导致性能问题。
30
+
31
+ ## 5. 不要使用stream来更新数据,只用stream来查询
32
+
33
+ 例如:
34
+
35
+ ```java
36
+ List<FlightOrder > orders = orders. stream()
37
+ .filter(this :: orderCanTicketing)
38
+ .map(this :: setTicketSuccess)
39
+ .collect(Collectors . toList();
40
+
41
+ private FlightOrder setTicketSuccess(FlightOrder order) {
42
+ order. setStatus(" TicketSuccess" );
43
+ return order;
44
+ }
45
+ ```
46
+
47
+ 可以重构为
48
+
49
+ ```java
50
+ List<FlightOrder > orders = orders. stream()
51
+ .filter(this :: orderCanTicketing)
52
+ .collect(Collectors . toList();
53
+
54
+ orders. foreach(this :: setTicketSuccess);
55
+
56
+ private void setTicketSuccess(FlightOrder order) {
57
+ // ...
58
+ }
59
+ ```
You can’t perform that action at this time.
0 commit comments