回答編集履歴

2

update

2017/03/10 08:02

投稿

yohhoy
yohhoy

スコア6191

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

2017/03/10 08:01

投稿

yohhoy
yohhoy

スコア6191

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が空であるかどうかの判定