java言語のプログラミングにおける、java.util.stream.Streamクラス(以下 Streamクラス)の利用について、質問します。プログラミングの学習を始めて、日が浅い初心者です。プロ意識が高い質問サイトと小耳に挟みました。お手柔らかにお願いします。
Streamクラスについて、よく知るためだけのプログラムを作っています。言わば、練習用のプログラムです。Streamクラス内の、一般的に使われているメソッドを重点的に学んでいます(現場で働いたことや個人として開発したことは、一切ありませんが…)。コンパイルには成功しましたが、JVMに実行してもらうとき、エラーが発生しました。
###エラーメッセージ
java.lang.IllegalStateException
###ソースコード
import java.util.stream.Stream; import java.util.List; import java.util.ArrayList; import java.util.Arrays; public class Third{ public static void main(String[] args){ //下準備 Hero h1 = new Hero("田中"); Hero h2 = new Hero("鈴木"); Hero h3 = new Hero("山西"); List<Hero> heros = new ArrayList<>(); heros.add(h1); heros.add(h2); heros.add(h3); Stream<Hero> stream = heros.stream(); //メソッドの利用 if(stream.allMatch(h -> h.hp == 1000)){ if(stream.anyMatch(h -> h.name.equals("田中"))){ if(stream.noneMatch(h -> !(h.hp != 1000))){ System.out.print("OK"); }}} } }
試したこと
1.メソッドの呼び出した際は戻り値を対応する型に代入する
解決方法を調べたとき、Streamクラスは変数に代入しなけらばならないという情報を入手しました。しかし、依然変わらずエラーは発生してしまいます。
import java.util.stream.Stream; import java.util.List; import java.util.ArrayList; import java.util.Arrays; public class Third{ public static void main(String[] args){ //下準備 Hero h1 = new Hero("田中"); Hero h2 = new Hero("鈴木"); Hero h3 = new Hero("山西"); List<Hero> heros = new ArrayList<>(); heros.add(h1); heros.add(h2); heros.add(h3); Stream<Hero> stream = heros.stream(); //メソッドの利用 boolean judge1 = stream.allMatch(h -> h.hp == 1000); boolean judge2 = stream.anyMatch(h -> h.name.equals("田中")); boolean judge3 = stream.noneMatch(h -> !(h.hp != 1000)); if(judge1 || judge2 || judge3){System.out.print("OK");} } }
2.スタックトレースから問題箇所を推察する
boolean judge2 = stream.anyMatch(h -> h.name.equals("田中"));
上文から呼び出されるメソッドに問題が起きていると出力されました。よって、試しに上文を非表示にして実行してみました。しかしながら、上文の1行下の文に問題が起きていると入力されました。
import java.util.stream.Stream; import java.util.List; import java.util.ArrayList; import java.util.Arrays; public class Third{ public static void main(String[] args){ //下準備 Hero h1 = new Hero("田中"); Hero h2 = new Hero("鈴木"); Hero h3 = new Hero("山西"); List<Hero> heros = new ArrayList<>(); heros.add(h1); heros.add(h2); heros.add(h3); Stream<Hero> stream = heros.stream(); //メソッドの利用 boolean judge1 = stream.allMatch(h -> h.hp == 1000); //boolean judge2 = stream.anyMatch(h -> h.name.equals("田中")); boolean judge3 = stream.noneMatch(h -> !(h.hp != 1000)); if(judge1 || /*judge2 || */judge3){System.out.print("OK");} } }
お手上げです。どなたか、解決方法をご教示願います。
補足情報(FW/ツールのバージョンなど)
バージョン
Java 8 Update 301
拡張機能
なし
回答1件
あなたの回答
tips
プレビュー