LoginSignup
0
0

JavaのStreamAPIの「中間操作」について

Posted at

Streamインスタンスを作成したら、次は任意の中間操作ができます。
Streamインスタンスの作成方法については、以下の記事を参照してください。
JavaのStreamインスタンスを作成する

JavaのStream APIにおける中間操作

JavaのStream APIにおける中間操作は、ストリームの各要素に対して何らかの処理を行い、その結果を新しいストリームとして返す操作です。中間操作は遅延実行され、終端操作が呼び出されるまで実際の処理は行われません。以下に、よく使われる中間操作のいくつかを紹介します。

filter

条件に合う要素だけを取り出します。
filter 操作は、ストリームの各要素に対して条件をテストし、その条件を満たす要素のみを含む新しいストリームを生成します。条件はラムダ式で指定します。
この操作をすることで要素の数は減りますが、要素の型自体は変わりません。

例えば、次のコードでは、名前が "A" で始まる要素のみをフィルタリングしています。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Stream<String> filteredNames = names.stream().filter(name -> name.startsWith("A"));
// 結果: "Alice"

map

各要素に対して何らかの処理を行い、その結果を新しいストリームとして返します。
map 操作は、ストリームの各要素に対して指定された関数を適用し、その結果からなる新しいストリームを生成します。この操作は、要素を変換するのに便利です。

例えば、次のコードでは、各名前の文字数を取得しています。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Stream<Integer> nameLengths = names.stream().map(name -> name.length());
// 結果: 5, 3, 7 (各名前の文字数)

sorted

要素を並び替えます。
sorted 操作は、ストリームの要素を自然順序または指定された順序でソートし、その結果からなる新しいストリームを生成します。デフォルトでは自然順序(数値の場合は小さい順、文字列の場合は辞書順など)でソートされます。

例えば、次のコードでは、名前を辞書順にソートしています。

List<String> names = Arrays.asList("Charlie", "Bob", "Alice");
Stream<String> sortedNames = names.stream().sorted();
// 結果: "Alice", "Bob", "Charlie"

複数の中間操作

これらの操作を組み合わせることで、データの処理を柔軟に行うことができます。
たとえば、名前が "A" で始まる人の名前の文字数をソートする場合、以下のように書くことができます。

List<String> sortedFilteredLengths = names.stream()
    .filter(name -> name.startsWith("A"))
    .map(name -> name.length())
    .sorted()
    .collect(Collectors.toList());
// 結果: [5] (Alice の文字数)

このように、filter, map, sorted などの中間操作を使うことで、複雑なデータ処理のロジックを簡潔に記述することができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0