回答編集履歴
2
コード訂正
answer
CHANGED
@@ -6,10 +6,10 @@
|
|
6
6
|
|
7
7
|
```java
|
8
8
|
public static List<Integer> getAllSeqFirst5Diff3LteAsList(int num1) {
|
9
|
-
|
9
|
+
IntUnaryOperator f = Sequence4::getSeqFirst5Diff3ByIndex;
|
10
10
|
List<Integer> numericList = new ArrayList<Integer>();
|
11
|
-
for (int i = 1; f.
|
11
|
+
for (int i = 1; f.applyAsInt(i) < num1; i++) {
|
12
|
-
numericList.add(f.
|
12
|
+
numericList.add(f.applyAsInt(i));
|
13
13
|
}
|
14
14
|
return numericList;
|
15
15
|
}
|
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
ScalaやJavascriptであれば単純明快に`f(引数)`と書けますがJavaでは`f.apply(引数)`としか書けないので少し残念です。
|
19
19
|
|
20
|
+
訂正:swordoneさんコメントによりIntFunctionからIntUnaryOperatorに変更しました。そうした方が不要なboxingがなくなるので効率がよくなります。
|
21
|
+
|
20
22
|
- メソッド呼び出しを1か所で済むようにする(1)
|
21
23
|
|
22
24
|
ヒント:関数(メソッド)の適用結果を変数に代入しておく
|
1
コード変更
answer
CHANGED
@@ -40,9 +40,10 @@
|
|
40
40
|
|
41
41
|
```java
|
42
42
|
public static List<Integer> getAllSeqFirst5Diff3LteAsList(int num1) {
|
43
|
-
return
|
43
|
+
return IntStream.iterate(1, i -> i + 1)
|
44
|
-
.
|
44
|
+
.mapToObj(i -> getSeqFirst5Diff3ByIndex(i))
|
45
45
|
.filter(n -> n <= num1)
|
46
46
|
.collect(Collectors.toList());
|
47
47
|
}
|
48
|
-
```
|
48
|
+
```
|
49
|
+
訂正:元のコードはStream.iterate, mapを使ってましたがIntStream.iterate, mapToObjに変更しました。
|