Java Stream 中間操作

JavaのStream APIには、中間操作と終端操作の2種類の操作があります。中間操作は、元のストリームを変換し、別のストリームを返す操作です。

以下に、いくつかの中間操作とその説明を示します。

Java filter(Predicate<T> predicate)

filter()メソッドは、ストリーム内の各要素に対して指定された条件をテストし、条件に合致する要素だけを含む新しいストリームを生成します。以下は、filter()メソッドを使用して、数値のリストから偶数だけを含む新しいストリームを生成する例です。

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, 6, 7, 8, 9, 10);
        Stream<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0);
        evenNumbers.forEach(System.out::println);
    }
}

Java map(Function<T, R> mapper)

map()メソッドは、ストリーム内の各要素に対して指定された関数を適用し、その結果を含む新しいストリームを生成します。以下は、map()メソッドを使用して、文字列リストから各文字列の長さを含む新しいストリームを生成する例です。

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");
        Stream<Integer> wordLengths = words.stream().map(String::length);
        wordLengths.forEach(System.out::println);
    }
}

Java flatMap(Function<T, Stream<R>> mapper)

flatMap()メソッドは、各入力要素に対してストリームを生成し、そのストリームの要素を単一のストリームにフラット化します。以下は、flatMap()メソッドを使用して、文字列リストの各要素を単語に分割し、それらを含む新しいストリームを生成する例です。

import java.util.stream.*;
import java.util.List;
import java.util.Arrays;

class Main{
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1,2,3);
        List<Integer> list2 = Arrays.asList(4,5,6);
        List<Integer> list3 = Arrays.asList(7,8,9);

        List<List<Integer>> nestedList = Arrays.asList(list1,list2,list3);
        System.out.println(nestedList);
        // flatMapでflat化
        nestedList
            .stream()
            .flatMap(list -> list.stream())
            .forEach(System.out::println);
    }
}

Java distinct()

distinct()メソッドは、ストリーム内の重複する要素を除去し、新しいストリームを生成します。以下は、distinct()メソッドを使用して、数値のリストから重複を除いた要素だけを含む新しいストリームを生成する例です。

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, 2, 4, 5, 3, 6, 7, 5, 8, 9, 4, 10);
Stream<Integer> distinctNumbers = numbers.stream().distinct();
distinctNumbers.forEach(System.out::println);
    }
}

この記事を書いた人

著者の画像

Jeffry Alvarado

Ex-Facebook Engineer 大学ではコンピュータサイエンスを専攻し、在学中に複数のインターンシップを経験。コンピュータサイエンスが学習できるプラットフォームRecursionを創業し、CTOとしてカリキュラム作成、ソフトウェア開発を担当。


ツイート