Java Stream 終端操作
JavaのStream APIには、中間操作と終端操作の2種類の操作があります。終端操作は、ストリームから結果を取り出したり、各要素に処理を実行したりする操作です。終端操作を実行したストリームは消費済みになり、再利用できません。
以下に、いくつかの終端操作とその説明を示します。
Java forEach(Consumer<? super T> action)
forEach()メソッドは、ストリーム内の各要素に対して指定されたアクションを実行します。以下は、forEach()メソッドを使用して、数値のリストの各要素を出力する例です。
import java.util.stream.*;
import java.util.List;
import java.util.Arrays;
class Main{
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(System.out::println);
}
}
Java count()
count()メソッドは、ストリーム内の要素数を返します。countの戻り値はlong型であることに注意が必要です。以下は、count()メソッドを使用して、数値のリストの要素数を求める例です。
import java.util.stream.*;
import java.util.List;
import java.util.Arrays;
class Main{
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream().count();
System.out.println("Number of elements in the list: " + count);
}
}
Java reduce(T identity, BinaryOperator<T> accumulator)
reduce()メソッドは、ストリーム内の要素を畳み込み、1つの値に集約します。以下は、reduce()メソッドを使用して、数値のリストの総和を求める例です。
import java.util.stream.*;
import java.util.List;
import java.util.Arrays;
class Main{
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println("Sum of elements in the list: " + sum);
}
}
Java collect(Collector<? super T, A, R> collector)
collect()メソッドは、ストリーム内の要素を収集し、指定されたコレクターに従って結果を返します。以下は、collect()メソッドを使用して、文字列リストの各要素を大文字に変換した新しいリストを生成する例です。
import java.util.stream.*;
import java.util.List;
import java.util.Arrays;
class Main{
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List<String> uppercaseWords = words.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println("Uppercase words: " + uppercaseWords);
}
}
Java anyMatch(Predicate<? super T> predicate)
anyMatch()メソッドは、ストリーム内の要素が少なくとも1つ、指定された条件を満たすかどうかをテストします。以下は、anyMatch()メソッドを使用して、数値のリストの中に3の倍数が含まれるかどうかを判定する例です。
import java.util.stream.*;
import java.util.List;
import java.util.Arrays;
class Main{
public static void main(String[] args) {
List<Integer> numbers1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> numbers2 = Arrays.asList(1, 2, 4, 5);
boolean isMultipleOf3 = numbers1.stream().anyMatch(n -> n % 3 == 0);
boolean isNotMultipleOf3 = numbers2.stream().anyMatch(n -> n % 3 == 0);
System.out.println(isMultipleOf3 ? "The list contains a multiple of 3": "The list does not contain a multiple of 3");
System.out.println(isNotMultipleOf3 ? "The list contains a multiple of 3": "The list does not contain a multiple of 3");
}
}
上記のコードでは、anyMatch()メソッドを使用して、リスト内の少なくとも1つの要素が3の倍数であるかどうかを判定しています。anyMatch()メソッドには、Predicate<T>型の引数が必要で、この例ではラムダ式を使用して、3で割った余りが0である場合にtrueを返す条件を指定しています。
最後に、条件に一致する要素が存在するかどうかに応じて、適切なメッセージが出力されます。