回答編集履歴

1

動作を間違えていたので修正

2021/11/05 18:06

投稿

swordone
swordone

スコア20669

test CHANGED
@@ -1,8 +1,6 @@
1
- せっかくなら、Streamの機能やOptionalの特性をもっと活かしましょう。
1
+ せっかくなら、Optionalの特性をもっと活かしましょう。
2
2
 
3
- Optionalに中身があるかどうかのチェックも、わざわざ中身を取り出すことも
3
+ Optionalに中身があるかどうかのチェックも、わざわざ中身を取り出すこともせずに比較できます。
4
-
5
- することなく比較できます。
6
4
 
7
5
  (InvoiceNumberをequals比較できるようにしておくと楽かと思われます)
8
6
 
@@ -10,29 +8,27 @@
10
8
 
11
9
  ItemEntityResult = ItemEntitys.stream()
12
10
 
13
- .map(i -> i.getInvoiceNumberOptional()
11
+ .filter(i -> i.getInvoiceNumberOptional()
14
12
 
15
13
  .filter(x -> x.equals(ItemFilterCondition.getInvoiceNumber()))
16
14
 
17
- .orElse(null))
15
+ .isPresent())
18
-
19
- .filter(x -> x != null)
20
16
 
21
17
  .collect(Collectors.toList());
22
18
 
23
19
  ```
24
20
 
25
- 上記コードではOptionalからListにまとめるにあたって、排除する要素をnullにして除外してますが、Java9以降ならその処理Optionalで済ませができ、nullが必要なくなります。
21
+ あるい、検索項目の方をOptionalに入れてしという手ると思います。
22
+
23
+ (先と同じく、InvoiceNumberをequals比較できること前提)
26
24
 
27
25
  ```java
28
26
 
29
27
  ItemEntityResult = ItemEntitys.stream()
30
28
 
31
- .flatMap(i -> i.getInvoiceNumberOptional()
29
+ .filter(i -> i.getInvoiceNumberOptional()
32
30
 
33
- .filter(x -> x.equals(ItemFilterCondition.getInvoiceNumber()))
31
+ .equals(Optional.ofNullable(ItemFilterCondition.getInvoiceNumber())))
34
-
35
- .stream())
36
32
 
37
33
  .collect(Collectors.toList());
38
34