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

回答編集履歴

2

Stream APIでの検索方法について追記

2019/12/12 05:47

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -99,4 +99,25 @@
99
99
  Food: name=name04, priceNum=40, orderNum=400
100
100
 
101
101
  C>
102
+ ```
103
+
104
+ ---
105
+ **追記しました: 2019-12-12 14:46**
106
+
107
+ `ArrayList`の場合、リスト中のインスタンスを検索する時にループなどで`ArrayList#get`で要素を逐一見ていく必要があるかもしれません。Stream APIを使うとよりスマートなコードとなる場合もあります。
108
+ ```Java
109
+ import java.util.List;
110
+ import java.util.ArrayList;
111
+ import java.util.stream.Collectors;
112
+
113
+ ...省略
114
+
115
+ // Stream APIを使って指定の要素(例:nameフィールドが"name04")のインスタンスを取得
116
+ List<Food> foods = list.stream().filter(elem -> elem.getName().equals("name04")).collect(Collectors.toList());
117
+ if (foods.size() == 1) {
118
+ Food target = foods.get(0);
119
+ target.setName("NewNameFor#4");
120
+ target.setPriceNum(444);
121
+ target.setOrderNum(4444);
122
+ }
102
123
  ```

1

assertについて注記

2019/12/12 05:47

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -62,7 +62,6 @@
62
62
 
63
63
  // 修正後のリストの内容を表示
64
64
  dump(list);
65
-
66
65
  }
67
66
 
68
67
  private static void dump(ArrayList<Food> list) {
@@ -77,7 +76,7 @@
77
76
 
78
77
  ```
79
78
 
80
- 上記コードの実行結果です。リスト中の`list[2]`のインスタンスに影響があるのが分かります。
79
+ 上記コードの実行結果です。リスト中の`list[2]`のインスタンスに影響があるのが分かります。尚、`java`コマンド実行時に"-ea"オプションを付け、コード中の`assert`診断が有効になるようにしています。
81
80
  ```CMD
82
81
  C>javac t1.java
83
82
 
@@ -86,7 +85,7 @@
86
85
  Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
87
86
  Java HotSpot(TM) Client VM (build 25.162-b12, mixed mode, sharing)
88
87
 
89
- C>java t1
88
+ C>java -ea t1
90
89
  start t1.main
91
90
  --------
92
91
  Food: name=name01, priceNum=10, orderNum=100