回答編集履歴
2
「負のほうに」を削除、メソッド参照Comparator
answer
CHANGED
@@ -49,4 +49,9 @@
|
|
49
49
|
今このmaxメソッドに渡しているComparatorは、2つの文字列のlength()、つまり長さの差を取ることで、長さの大小を比較していることになります。この符号が正か負かで、どちらが長いかが決定できます。
|
50
50
|
そして負であるとき、つまりd1のほうが短いとき、メソッドの設計の話からd1が昇順で先に並ぶことになります。
|
51
51
|
maxメソッド内ではこれを自動でやってくれるのでd1とかd2に当たるものが何か外部からは見えませんが、「短いものから先に並ぶ」という要件にはなっています。
|
52
|
-
※今回の場合は「文字列の長さ」のため、両方0以上の値であるから引き算で比較できたが、一般のint値同士を引き算で比較するとオーバーフローする恐れがあるので注意が必要
|
52
|
+
※今回の場合は「文字列の長さ」のため、両方0以上の値であるから引き算で比較できたが、一般のint値同士を引き算で比較するとオーバーフローする恐れがあるので注意が必要
|
53
|
+
また次のように書くことも可能
|
54
|
+
```java
|
55
|
+
Optional<String> result2 = data.stream().max(Comparator.comparingInt(String::length));
|
56
|
+
```
|
57
|
+
こうすることで、「文字列の長さで比較」ということを明示的にできる
|
1
\[
answer
CHANGED
@@ -49,4 +49,4 @@
|
|
49
49
|
今このmaxメソッドに渡しているComparatorは、2つの文字列のlength()、つまり長さの差を取ることで、長さの大小を比較していることになります。この符号が正か負かで、どちらが長いかが決定できます。
|
50
50
|
そして負であるとき、つまりd1のほうが短いとき、メソッドの設計の話からd1が昇順で先に並ぶことになります。
|
51
51
|
maxメソッド内ではこれを自動でやってくれるのでd1とかd2に当たるものが何か外部からは見えませんが、「短いものから先に並ぶ」という要件にはなっています。
|
52
|
-
※今回の場合は「文字列の長さ」のため、両方0以上の値であるから引き算で比較できたが、一般のint値同士を引き算で比較すると
|
52
|
+
※今回の場合は「文字列の長さ」のため、両方0以上の値であるから引き算で比較できたが、一般のint値同士を引き算で比較するとオーバーフローする恐れがあるので注意が必要
|