データの利用例 平均を求める • リストに4人の成績がまとめられているので、 平均点を求める • 4人だからいいけど、人数が増えたら? • インデックス書き間違えない? • 人数が増えたとき人数を更新しわすれない? List scores = ...; int sum = 0; sum += scores.get(0); sum += scores.get(1); sum += scores.get(2); sum += scores.get(3); double ave = (double)sum/4;
List scores = ...; int sum = 0; sum += scores.get(0); sum += scores.get(1); sum += scores.get(2); sum += scores.get(3); double ave = (double)sum/4; データの利用例 平均を求める • リストに4人の成績がまとめられているので、 平均点を求める インデックスが異なるだけで 同じ処理を繰り返している 処理をくくりだして ループでまとめる
平均を求める - for文バージョン ループ変数 i の制御 0からコレクションの要素数まで1ずつ増える ループ変数をインデックスに使用 コレクションの要素数を使用 List scores = ...; int sum = 0; for (int i = 0; i < scores.size(); i++) { sum += scores.get(i); } double ave = (double)sum/scores.size();
平均を求める – for-each文バージョン scoresの要素がscoreに代入される List scores = ...; int sum = 0; for (var score: scrores) { sum += score; } double ave = (double)sum/scores.size();
final int sum = scores.stream() .collect(Collectors.summingInt(x -> x)); final double ave = (double)sum/scores.size(); 平均を求める – Stream APIバージョン final int sum = scores.stream() .mapToInt(x -> x) .sum(); final double ave = (double)sum/scores.size(); final double ave = scores.stream() .collect(Collectors.averagingDouble(x -> x)); Ex 1. Ex 2. Ex 3.
• 顧客情報を保持するコレクションから東京の顧客を抽出 record Customer(CustomerID id, String name, String prefecture) {} List tokyoCustomers = new ArrayList<>(); for (int i = 0; i < customers.size(); i++) { var customer = customers.get(i); if (customer.prefecture().equals("Tokyo")) { tokyoCustomers.add(customer); } } 例 条件に合致した要素を抽出 – for文バージョン