teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2021/11/05 18:06

投稿

swordone
swordone

スコア20675

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