回答編集履歴
1
指摘に対応
test
CHANGED
@@ -26,17 +26,9 @@
|
|
26
26
|
|
27
27
|
if (l1.size() == 0 || l2.size() == 0) return acc;
|
28
28
|
|
29
|
-
acc.add(operator.apply(l1.
|
29
|
+
acc.add(operator.apply(l1.get(0), l2.get(0)));
|
30
30
|
|
31
|
-
return zippingMap(l1, l2, operator, acc);
|
32
|
-
|
33
|
-
}
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
static <T> List<T> zippingMap(List<T> l1, List<T> l2, BinaryOperator<T> operator) {
|
38
|
-
|
39
|
-
return zippingMap(
|
31
|
+
return zippingMap(l1.subList(1, l1.size()), l2.subList(1, l2.size()), operator, acc);
|
40
32
|
|
41
33
|
}
|
42
34
|
|
@@ -48,11 +40,11 @@
|
|
48
40
|
|
49
41
|
List<Integer> l1 = Arrays.asList(1, 3, 5, 7, 9);
|
50
42
|
|
51
|
-
List<Integer> l2 = Arrays.asList(
|
43
|
+
List<Integer> l2 = Arrays.asList(2, 4, 6, 8, 10);
|
52
44
|
|
53
45
|
|
54
46
|
|
55
|
-
List<Integer> result = zippingMap(l1, l2, (a, b) -> a + b);
|
47
|
+
List<Integer> result = zippingMap(l1, l2, (a, b) -> a + b, new ArrayList<>());
|
56
48
|
|
57
49
|
System.out.println(result);
|
58
50
|
|
@@ -68,7 +60,7 @@
|
|
68
60
|
|
69
61
|
|
70
62
|
|
71
|
-
**
|
63
|
+
**Scala**
|
72
64
|
|
73
65
|
|
74
66
|
|
@@ -76,7 +68,7 @@
|
|
76
68
|
|
77
69
|
|
78
70
|
|
79
|
-
```
|
71
|
+
```Scala
|
80
72
|
|
81
73
|
object ZipAndMap extends App {
|
82
74
|
|
@@ -92,15 +84,15 @@
|
|
92
84
|
|
93
85
|
|
94
86
|
|
95
|
-
**
|
87
|
+
**Python**
|
96
88
|
|
97
89
|
|
98
90
|
|
99
|
-
初心者の私が
|
91
|
+
初心者の私がPythonで書くとこうなる。
|
100
92
|
|
101
93
|
|
102
94
|
|
103
|
-
```
|
95
|
+
```Python
|
104
96
|
|
105
97
|
l1 = [1,3,5,7,9]
|
106
98
|
|
@@ -116,7 +108,7 @@
|
|
116
108
|
|
117
109
|
|
118
110
|
|
119
|
-
`zip`と`tuple`でやるとこうなる。
|
111
|
+
`zip`と`tuple`でやるとこうなる。
|
120
112
|
|
121
113
|
|
122
114
|
|
@@ -148,17 +140,9 @@
|
|
148
140
|
|
149
141
|
if (l1.size()==0 ||l2.size()==0) return acc;
|
150
142
|
|
151
|
-
acc.add(new Tuple<>(l1.
|
143
|
+
acc.add(new Tuple<>(l1.get(0),l2.get(0)));
|
152
144
|
|
153
|
-
return zip(l1,l2,acc);
|
154
|
-
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
static <T,U> List<Tuple<T,U>> zip(List<T> l1, List<U> l2) {
|
160
|
-
|
161
|
-
return zip(
|
145
|
+
return zip(l1.subList(1,l1.size()),l2.subList(1,l2.size()),acc);
|
162
146
|
|
163
147
|
}
|
164
148
|
|
@@ -170,11 +154,11 @@
|
|
170
154
|
|
171
155
|
List<Integer> l1 = Arrays.asList(1,3,5,7,9);
|
172
156
|
|
173
|
-
List<Integer> l2 = Arrays.asList(
|
157
|
+
List<Integer> l2 = Arrays.asList(2,4,6,8,10);
|
174
158
|
|
175
159
|
|
176
160
|
|
177
|
-
List<Tuple<Integer,Integer>> acc = zip(l1,l2);
|
161
|
+
List<Tuple<Integer,Integer>> acc = zip(l1,l2,new ArrayList<>());
|
178
162
|
|
179
163
|
List<Integer> result = acc.stream().collect(ArrayList::new, (a,e) -> a.add(e._1 + e._2), List::addAll);
|
180
164
|
|
@@ -189,3 +173,19 @@
|
|
189
173
|
}
|
190
174
|
|
191
175
|
```
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
**指摘への対応**
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
- `unmodifiableList`に対応できない
|
184
|
+
|
185
|
+
やりたいことは関数型言語のListのhead/tail相当の処理なので、List#get(0)/List#subList(1,<リストのサイズ>)を使うことで効率よく同等の処理ができました。
|
186
|
+
|
187
|
+
|
188
|
+
|
189
|
+
- スタックオーバーフローにはあえて対応していません。
|
190
|
+
|
191
|
+
末尾再帰を最適化できる言語があるからです。
|