Java SE8 Goldの勉強をしているのですが、問題を解いていて疑問に思ったことがあります。
ある問題では、次のコートについて、「コンパイルは成功するが、実行するとハングとなる」が正解とされています。
java
1Predicate<? super String> p = s -> s.startsWith("g"); 2Stream<String> st1 = Stream.generate(() -> "orange"); 3Stream<String> st2 = Stream.generate(() -> "gold")); 4System.out.print(st1.anyMatch(p) + " "); 5System.out.println(st2.allMatch(p));
理由は、generate()メソッドはlimit()などで終了しないと無限にストリームが生成されるためとのことです。
しかし、別の問題では、次のコードは「実行時エラー(IllegalStateException例外がスロー)」が正解とされています。
java
1Predicate<? super String> f = s -> s.length() > 3; 2Stream<String> stream = Stream.iterate("x", s -> s + s); 3boolean a = stream.noneMatch(f); 4boolean b = stream.anyMatch(f); 5System.out.println(a + " " + b);
理由は、同じStreamで終端操作を2回行っているためとのことです。
このコードについても、1つ目のコード同様、iterate()メソッドは無限にストリームを生成するため、「コンパイルは成功するが、実行するとハング」するが正解となるかと思います。(選択肢にもあります)。
違いが分かりません。素人のため、すごく単純な勘違いがあるかもしれませんが、どうかご教授お願い致します。
回答3件
あなたの回答
tips
プレビュー