Java 9のStream APIに追加された新機能4選!iterate・ofNullable・takeWhile・dropWhileを徹底解説
Java 9では、Oracle社がStream APIに便利な新メソッドを4つ追加しました。それらはiterate()、ofNullable()、takeWhile()、dropWhile()です。本記事では、それぞれのメソッドの特徴と使い方を、実際のコード例と実行結果とともにわかりやすく解説します。
iterate()
iterate()メソッドは、従来のforループの代替として使えるストリーム版のメソッドです。Java 9では引数が1つ追加され、第2引数にPredicateインターフェースを指定できるようになりました。これにより、無限に生成され続ける数値を、条件に基づいて適切なタイミングで停止させることが可能になっています。
コード例
import java.util.stream.Stream;
public class StreamIterateMethodTest {
public static void main(String[] args) {
Stream.iterate(1, i -> i < 5, i -> i + 1).forEach(System.out::println); // iterate()
}
}
実行結果
1 2 3 4
ofNullable()
ofNullable()メソッドは、指定した要素がnullでない場合にはその要素を含むStreamオブジェクトを返し、nullの場合には空のストリームを返します。nullチェックのコードを書く手間を省き、NullPointerExceptionを回避しながら安全にストリーム処理を行える点が大きなメリットです。
コード例
import java.util.stream.Stream;
public class StreamOfNullableMethodTest {
public static void main(String[] args) {
String str = "TutorialsPoint";
Stream.ofNullable(str).forEach(System.out::println); // ofNullable()メソッド
}
}
実行結果
TutorialsPoint
takeWhile()
takeWhile()メソッドの引数にはPredicateインターフェースを渡します。このメソッドは、ストリームの要素を左から右へ順番に処理し、Predicateの条件が満たされている間だけ要素を取得し続けます。そして、条件が初めて満たされなくなった時点で処理を終了し、それ以降の要素は無視されます。
コード例
import java.util.stream.Stream;
public class StreamTakeWhileMethodTest {
public static void main(String[] args) {
Stream.of(1, 2, 3, 4, 5)
.takeWhile(i -> i < 5) // takeWhile()メソッド
.forEach(System.out::println);
}
}
実行結果
1 2 3 4
dropWhile()
dropWhile()メソッドも引数としてPredicateインターフェースを受け取りますが、その動作はtakeWhile()とは正反対です。このメソッドは、ストリームの各要素を左から右へ走査し、条件を満たしている要素をすべてスキップ(破棄)します。そして、条件が初めて満たされなくなった時点以降の残りの要素をすべて返します。
コード例
import java.util.stream.Stream;
public class StreamDropWhileMethodTest {
public static void main(String[] args) {
Stream.of(3, 2, 1, 4, 6, 7, 8, 9, 10)
.dropWhile(i -> i < 5) // dropWhile()メソッド
.forEach(System.out::println);
}
}
実行結果
6 7 8 9 10
まとめ
Java 9のStream APIに追加されたこれら4つのメソッドを活用することで、より柔軟で可読性の高いストリーム処理を記述できるようになります。iterate()は条件付きのループ処理に、ofNullable()はnull安全性の確保に、takeWhile()とdropWhile()は条件に基づく要素の取得・除外に、それぞれ効果的です。日常的なデータ処理コードの品質向上にぜひ役立ててください。
-
Javaのpaint()メソッドとrepaint()メソッドの違いをわかりやすく解説
JavaでGUIアプリケーションを開発する際、コンポーネントの描画に関わるpaint()メソッドとrepaint()メソッドは、役割がまったく異なる重要なメソッドです。この記事では、両者の違いと正しい使い方を具体例とともに解説します。 paint()メソッドとrepaint()メソッドの違い paint()メソッドとは paint()は、コンポーネントを実際に描画するための処理(描画命令)を記述するメソッドです。Java AWTでは、このメソッドをオーバーライドして独自の描画処理を実装します。 一方、Java SwingではpaintComponent()メソッドをオーバーライドするのが推奨さ
-
【Java入門】printStackTrace()とgetMessage()の違いを徹底解説!例外情報の取得方法を使い分けよう
Javaで発生した例外(Exception)の詳細情報を確認する方法は主に2つあります。それがprintStackTrace()メソッドとgetMessage()メソッドです。どちらもThrowableクラスに定義されたメソッドですが、出力される情報量や用途が大きく異なります。本記事では、それぞれの特徴と具体的な使い方をサンプルコード付きで解説します。 printStackTrace()メソッドとは java.lang.Throwableクラスで定義されており、java.lang.Errorクラスおよびjava.lang.Exceptionクラスに継承されています。 例外のクラス名、エラーメ