Java 9のStream APIにおけるtakeWhile()とdropWhile()メソッドの違いを解説
Java 9で導入されたStream APIには、takeWhile()メソッドとdropWhile()メソッドという2つの便利なメソッドが追加されました。この2つのメソッドは似た名前を持っていますが、その動作は正反対です。
- takeWhile():述語(predicate)がfalseを返すまでのすべての要素を受け入れます。
- dropWhile():述語に一致する間、すべての要素を破棄(スキップ)します。
順序付きストリームの場合
ストリームが順序付けされている場合、以下のように動作します。
- takeWhile()は、述語に一致する要素の最長プレフィックス(先頭からの連続した部分)からなるストリームを返します。
- dropWhile()は、述語に一致した後の残りのストリームを返します。
順序なしストリームの場合
ストリームが順序付けされていない場合、以下のように動作します。
- takeWhile()は、ストリームから抽出された、述語に一致する要素のサブセットからなるストリームを返します。
- dropWhile()は、述語に一致する要素のサブセットを破棄した後の残りの要素からなるストリームを返します。
takeWhile()メソッドの構文
default Stream<T> takeWhile(Predicate<? super T> predicate)
takeWhile()の使用例
import java.util.stream.Stream;
public class TakeWhileMethodTest {
public static void main(String args[]) {
Stream.of("India", "Australia", "Newzealand", "", "South Africa", "England")
.takeWhile(o -> !o.isEmpty())
.forEach(System.out::print);
}
}
実行結果
IndiaAustraliaNewzealand
上記の例では、空文字列に到達した時点で述語がfalseを返すため、それ以降の要素("South Africa"、"England")は処理されません。
dropWhile()メソッドの構文
default Stream<T> dropWhile(Predicate<? super T> predicate)
dropWhile()の使用例
import java.util.stream.Stream;
public class DropWhileMethodTest {
public static void main(String args[]) {
Stream.of("India", "Australia", "Newzealand", "", "England", "Srilanka")
.dropWhile(o -> !o.isEmpty())
.forEach(System.out::print);
System.out.println();
Stream.of("India", "", "Australia", "", "England", "Srilanka")
.dropWhile(o -> !o.isEmpty())
.forEach(System.out::print);
}
}
実行結果
EnglandSrilanka
AustraliaEnglandSrilanka
最初の例では、先頭の3つの要素("India"、"Australia"、"Newzealand")が述語に一致するため破棄され、残りの要素のみが出力されます。2つ目の例では、"India"だけが破棄され、空文字列以降のすべての要素が出力されます。このように、dropWhile()は述語が初めてfalseを返した時点でスキップを停止し、それ以降の要素をすべてそのまま渡す点が特徴です。
-
Javaのwait()メソッドとsleep()メソッドの違いを徹底解説
Javaのマルチスレッドプログラミングでは、sleep()メソッドとwait()メソッドのどちらもスレッドの処理を一時停止させるために使用されますが、両者にはいくつかの重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 sleep()メソッドとwait()メソッドの主な違い 1. メソッドの種類と影響範囲 sleep()メソッドはThreadクラスのstatic(静的)メソッドであり、呼び出すと現在実行中のスレッドを「実行不可能(Non-Runnable)」状態にします。 一方、wait()メソッドはインスタンスメソッドであり、スレッドオブジェクトではなく対象の
-
JavaのcompareTo()メソッドとcompare()メソッドの違いを徹底解説
Javaでオブジェクトを並べ替える際に登場するのが、ComparableインターフェースのcompareTo()メソッドと、Comparatorインターフェースのcompare()メソッドです。名前はよく似ていますが、役割や使い方には明確な違いがあります。 Comparableインターフェースが提供するcompareTo()メソッドは、オブジェクトの順序付けを決めるためのもので、この順序は自然順序付け(natural ordering)、このメソッドは自然比較メソッドと呼ばれます。一方、Comparatorインターフェースが提供するcompare()メソッドはソート処理を実行するためのもので、