回答編集履歴
2
typo
answer
CHANGED
@@ -7,12 +7,12 @@
|
|
7
7
|
final List<ArrayList<Integer>> data =
|
8
8
|
IntStream.rangeClosed(0, 3)
|
9
9
|
.mapToObj(i ->
|
10
|
-
new ArrayList<>(
|
11
|
-
|
10
|
+
IntStream.rangeClosed(1, 3)
|
12
|
-
|
11
|
+
.mapToObj(num -> Integer.valueOf(i * num))
|
13
|
-
|
12
|
+
.collect(Collectors.toList()
|
14
|
-
|
13
|
+
)
|
15
14
|
)
|
15
|
+
.map(ArrayList::new)
|
16
16
|
.collect(Collectors.toList());
|
17
17
|
System.out.println(data);
|
18
18
|
|
@@ -34,4 +34,21 @@
|
|
34
34
|
IntStream.rangeClosed(0, 3)
|
35
35
|
.parallel()
|
36
36
|
.mapToObj(i ->
|
37
|
+
```
|
38
|
+
|
39
|
+
---
|
40
|
+
|
41
|
+
余談ですが、StreamAPIを使い始めて、collectとか使わなくちゃいけなくて、なんかめんどうくさいなぁ、とおもいはじめてKotlinをみると、ラクそうにみえてくるとおもいます。
|
42
|
+
|
43
|
+
```kotlin
|
44
|
+
fun main(args: Array<String>) {
|
45
|
+
val data: List<MutableList<Int>> =
|
46
|
+
(0..3).map { i ->
|
47
|
+
(1..3).map { num -> num * i }.toMutableList()
|
48
|
+
}
|
49
|
+
println(data)
|
50
|
+
|
51
|
+
data.forEach { it.add(999) }
|
52
|
+
println(data)
|
53
|
+
}
|
37
54
|
```
|
1
typo
answer
CHANGED
@@ -23,15 +23,11 @@
|
|
23
23
|
|
24
24
|
> ① stream api と foreachの違いはなんでしょうか?foreachではdataが書き換わってしまうという事ぐらいでしょうか?(stream api は新しいcollectionに対しての操作という認識)
|
25
25
|
|
26
|
-
`data.forEach(it -> it.add(999));`は、`data.stream().forEach(it -> it.add(999));`
|
26
|
+
`data.forEach(it -> it.add(999));`は、`data.stream().forEach(it -> it.add(999));`の短縮形|省略形だと捉えてみてはどうでしょうか?forEach()メソッドもStreamAPIの一部だ、と。ただ、forEach()メソッドの中身をみると実際の実装は違うようですけれど。
|
27
|
-
の短縮形|省略形だと捉えてみてはどうでしょうか?
|
28
|
-
forEach()メソッドの中身をみると実際の実装は違いますけれど。
|
29
27
|
|
30
28
|
> ② 上記のプログラムのように foreachで処理することに問題はあるでしょうか?
|
31
29
|
|
32
|
-
問題はないとおもいます。
|
33
|
-
た
|
30
|
+
たとえば、StreamAPIを使うとparallel()を挟むだけで簡単に並列処理ができたりしますね(この程度の処理ではむしろ効率悪くなりますけど)。
|
34
|
-
(この程度の処理ではむしろ効率悪くなりますけど)。
|
35
31
|
|
36
32
|
```java
|
37
33
|
final List<ArrayList<Integer>> data =
|