Stream によるデータ変換

Java の入出力とストリーム

Alex Liu

Software Development Engineer

Stream によるデータ変換

  • Stream によるデータ変換

    • データ形式の変換、集計、フィルタリング
    • 結果を別のコレクション型に保存(例: ListSet
    • 対応コレクション:
      • List(例: ArrayList, LinkedList
      • Set(例: HashSet, TreeSet
      • Map(Keys/ValuesStreams として)(例: HashMap, TreeMap
      • 配列(Arrays.stream() 経由)
  • 以降で使用する ArrayList names の例

    names: ["Alice", "Bob", "Charlie", "David"]
    
Java の入出力とストリーム

Stream を使った要素変換

  • 準備: 必要なクラス SetCollectorsStream をインポート
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

// 先ほど作成した `ArrayList` `names` を `Stream` に変換 Stream<String> namesStream = names.stream();
  • 現在のデータ: [Alice, Bob, Charlie, David]
Java の入出力とストリーム

Stream を使った要素変換(続き)

// `.map()` で各要素を大文字に変換
Stream<String> upperCaseNameStream = namesStream.map(
        name -> name.toUpperCase())
  • 現在のデータ: [ALICE, BOB, CHARLIE, DAVID]
// `.collect()` と `Collectors.toSet()` で変換結果を Set に格納
upperCaseNameStream.collect(Collectors.toSet())
  • 最終データ:
    {CHARLIE, ALICE, BOB, DAVID}
    
Java の入出力とストリーム

Stream を使った集約

  • .reduce() メソッド

    • 要素を単一の結果に集約
    • 合計連結最小/最大の取得に有用
  • .reduce() は2つの入力を取ります

    • 初期値: 蓄積の開始値(例: 0
    • 二項演算子: 2引数の関数
      • (x, y) -> x + y の意味:
        • x: これまでの累積値
        • y: 現在の要素
        • yx に加算し、全要素が処理されるまで継続
Java の入出力とストリーム

Stream を使った集約: 例

  • ArrayList namesStream に変換
    Stream<String> stream = names.stream();
    
  • .map() で名前の長さに変換し、.reduce() で合計
    stream
      .map(name -> name.length())
      .reduce(0, (sum, length) -> sum + length);
    
  • 結果: 20
Java の入出力とストリーム

練習しましょう!

Java の入出力とストリーム

Preparing Video For Download...