Java 9のJShellで中間ストリーム操作を活用する方法
JShellとは
JShellはJava 9で導入されたREPL(Read-Eval-Print Loop)ツールです。式、変数、メソッド、クラスなどの簡単な文を入力として受け付け、その結果を即座に表示します。コードを少しずつ試しながら動作を確認できるため、学習やプロトタイピングに非常に便利です。
中間ストリーム操作とは
Stream(ストリーム)は値の連なり(シーケンス)を表すものです。中間ストリーム操作とは、ストリームを受け取り、そこへ処理を適用して別のストリームを返す操作のことを指します。たとえばラムダ式を各要素に適用し、その結果からなる新しいストリームを生成します。
代表的な中間ストリーム操作
- 1) sorted(): 元のストリームの要素を保持したまま、自然順序(昇順)でソートした結果を返します。
- 2) distinct(): 入力ストリームから重複を取り除き、一意な要素だけを持つストリームを返します。残された要素の相対的な順序は維持されます。
- 3) filter(): 特定の条件(ロジック)に基づいてストリームの要素を絞り込むために使用します。
- 4) map(): ラムダ式を適用して入力ストリームの各要素から新しい結果を計算し、それらの結果からなるストリームを出力として返します。
なお、これらの中間操作は遅延評価されるため、forEach()などの終端操作を呼び出した時点で初めて実際の処理が実行されます。
JShellでの実行例
以下のコードスニペットでは、JShell上でさまざまな中間ストリーム操作を実装しています。
jshell> List<Integer> numbers = List.of(3, 10, 23, 200, 77, 9, 32); numbers ==> [3, 10, 23, 200, 77, 9, 32] jshell> numbers.stream().sorted().forEach(elem -> System.out.println(elem)); 3 9 10 23 32 77 200 jshell> List<Integer> numbers = List.of(3, 5, 54, 280, 5, 9, 40); numbers ==> [3, 5, 54, 280, 5, 9, 40] jshell> numbers.stream().distinct().forEach(elem -> System.out.println(elem)); 3 5 54 280 9 40 jshell> numbers.stream().distinct().sorted().forEach(elem -> System.out.println(elem)); 3 5 9 40 54 280 jshell> numbers.stream().distinct().map(num -> num * num).forEach(elem -> System.out.println(elem)); 9 25 2916 78400 81 1600 jshell> numbers.stream().filter(num -> num % 2 == 0).forEach(elem -> System.out.println(elem)); 54 280 40
このように、JShellを使えばsorted()、distinct()、map()、filter()といった中間操作を1行ずつ手軽に検証でき、ストリームAPIの挙動を直感的に理解することができます。
-
JavaのMath.random()メソッド徹底解説!乱数生成の基本から範囲指定まで
JavaのMath.random()メソッドは、0.0以上1.0未満の擬似乱数(疑似ランダムな数値)を生成するためのメソッドです。生成された乱数に別の数値を掛けることで、0〜1以外の任意の範囲の乱数を取得することもできます。結果が0になることはあっても、1以上になることはありません。 プログラミングで乱数が必要になる場面 プログラミングをしていると、ランダムな数値を生成したい場面によく出会います。例えば、クルーズ船会社を運営しているとしましょう。顧客の注文番号として使う予約参照番号をランダムに生成したり、数当てゲーム用のランダムな数字を作りたいといったケースが考えられます。 Javaには、乱
-
Java 9のJShellで例外はどう扱われる?自動キャッチの仕組みと具体例
JShellとはJava 9で導入されたJShellは、Java言語の機能や豊富なライブラリを素早く探索・発見・実験できる、高速で使いやすい対話型環境(REPL)です。コードを1行ずつ入力して即座に結果を確認できるため、学習やプロトタイピングに最適なツールといえます。JShellにおける例外処理の仕組み通常のJavaプログラムでは、try-catchブロックなどを使って例外を明示的に捕捉する必要があります。しかし、JShellでは例外を手動でキャッチする必要がありません。JShellは発生した各例外を自動的にキャッチし、例外の種類やメッセージなどの情報を表示した後、次のJShellプロンプトを