JavaのStream APIは便利な機能を提供しますが、flatMapmapはしばしば混同されることがあります。これらの違いについて説明します。

flatMapとmapの基本的な違い

map

mapは各要素に対して指定された関数を適用し、新しい要素を生成します。これにより、各要素が1対1の関係で変換されます。

List<String> words = Arrays.asList("Hello", "World");
List<Integer> wordLengths = words.stream()
                                .map(String::length)
                                .collect(Collectors.toList());
// wordLengths: [5, 5]

上記の例では、各単語の長さが取得され、新しいリストが生成されます。

flatMap

一方で、flatMapは各要素に対して指定された関数を適用し、その結果として得られる各要素のストリームを1つのストリームに平坦化します。これは、1対多または多対多の関係を扱うのに適しています。

List<List<Integer>> numbers = Arrays.asList(
                                Arrays.asList(1, 2),
                                Arrays.asList(3, 4),
                                Arrays.asList(5, 6));

List<Integer> flattenedNumbers = numbers.stream()
                                       .flatMap(List::stream)
                                       .collect(Collectors.toList());
// flattenedNumbers: [1, 2, 3, 4, 5, 6]

上記の例では、各リストの要素が平坦化され、1つのリストになります。

どちらを使うかの選択基準

  • mapは要素を変換する際に1対1の関係が維持される場合に使用します。
  • flatMapは1対多や多対多の関係を持つ場合に使用します。例えば、リスト内のリストを平坦化するなどの場面で有用です。

これらの違いを理解することで、Stream APIをより効果的に使用できるようになります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です