JavaのStream APIには、中間操作と終端操作の2種類の操作があります。終端操作は、ストリームから値を取り出す操作であり、これによってストリームが閉じられます。
以下に、いくつかの終端操作とその説明を示します。
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);
}
}
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);
}
}
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);
}
}
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);
}
}
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を返す条件を指定しています。
最後に、条件に一致する要素が存在するかどうかに応じて、適切なメッセージが出力されます。