回答編集履歴
2
update
test
CHANGED
@@ -31,3 +31,7 @@
|
|
31
31
|
|
32
32
|
|
33
33
|
いずれも正しい実装です。要素数が多いときは、短絡評価(short-circuit)を行う後者`isEmpty2()`メソッドの方が効率が良いと思います。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
追記:対象ストリームが無限ストリーム(例:[`java.util.Random#ints()`](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Random.html#ints--))の場合、前者`isEmpty()`メソッドは正常に機能しなくなります。安全性と効率の両面から後者実装の方が好ましいと思いました。
|
1
update
test
CHANGED
@@ -16,6 +16,14 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
+
Java 8 [インタフェースStream<T>](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html)より引用:
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
> (中間または終端ストリーム操作を呼び出して)ストリームを操作するのは、一度だけにすべきです。このため、たとえば同じソースが2つ以上のパイプラインに対してデータを供給する「フォークされた」ストリームや、同じストリームを複数回トラバースすることなどは、禁止されます。ストリーム実装は、ストリームが再利用されているのを検出すると、IllegalStateExceptionをスローします。ただし、一部のストリーム操作からは新しいストリーム・オブジェクトではなくレシーバが返されることがあるため、場合によっては再利用を検出できない可能性があります。
|
24
|
+
|
25
|
+
|
26
|
+
|
19
27
|
---
|
20
28
|
|
21
29
|
> Streamが空であるかどうかの判定
|