Java | 実務でよく使う for → Stream 書き換え10パターン

Java Java
スポンサーリンク

ここでは、実務でよく使う「for文 → Stream API」書き換え10パターンを、
初心者でも理解できるように、「for文(Before) → Stream(After)」形式でコード付きにまとめます。


1️⃣ 全件出力

Before(拡張 for 文)

List<String> names = List.of("Alice", "Bob", "Charlie");
for (String name : names) {
    System.out.println(name);
}
Java

After(Stream API)

names.forEach(System.out::println);
Java

💡 ポイント:単純出力は forEach でシンプルに。


2️⃣ 条件付き抽出(filter)

Before

List<String> list = List.of("apple", "banana", "avocado");
List<String> result = new ArrayList<>();
for (String s : list) {
    if (s.startsWith("a")) {
        result.add(s);
    }
}
System.out.println(result);
Java

After

List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .toList();
System.out.println(result);
Java

💡 ポイント:filter で条件を明示化。


3️⃣ 要素変換(map)

Before

List<String> upper = new ArrayList<>();
for (String s : list) {
    upper.add(s.toUpperCase());
}
Java

After

List<String> upper = list.stream()
    .map(String::toUpperCase)
    .toList();
Java

💡 ポイント:map は「変換」を直感的に表現。


4️⃣ 条件付き変換(filter + map)

Before

List<String> result = new ArrayList<>();
for (String s : list) {
    if (s.length() > 3) {
        result.add(s.toUpperCase());
    }
}
Java

After

List<String> result = list.stream()
    .filter(s -> s.length() > 3)
    .map(String::toUpperCase)
    .toList();
Java

💡 黄金パターン:filter → map → collect


5️⃣ 集計(合計)

Before

int[] scores = {80, 90, 75};
int sum = 0;
for (int s : scores) {
    sum += s;
}
System.out.println(sum);
Java

After

int sum = Arrays.stream(scores).sum();
System.out.println(sum);
Java

💡 ポイント:sum(), average(), max() が便利。


6️⃣ 並べ替え(sorted)

Before

List<String> list = List.of("Bob", "Alice", "Charlie");
List<String> sorted = new ArrayList<>(list);
Collections.sort(sorted);
Java

After

List<String> sorted = list.stream()
    .sorted()
    .toList();
Java

💡 ポイント:sorted(Comparator) で独自順序も可能。


7️⃣ 重複排除(distinct)

Before

Set<String> set = new HashSet<>();
for (String s : list) {
    set.add(s);
}
Java

After

List<String> distinct = list.stream()
    .distinct()
    .toList();
Java

💡 ポイント:ユニークな要素だけが必要な場合に便利。


8️⃣ グループ化(groupingBy)

Before

Map<String, List<User>> grouped = new HashMap<>();
for (User u : users) {
    grouped.computeIfAbsent(u.getDept(), k -> new ArrayList<>()).add(u);
}

After

Map<String, List<User>> grouped = users.stream()
    .collect(Collectors.groupingBy(User::getDept));

💡 ポイント:部署ごとの分類などに一行で書ける。


9️⃣ ネストリスト展開(flatMap)

Before

List<String> result = new ArrayList<>();
for (List<String> inner : listOfLists) {
    result.addAll(inner);
}
Java

After

List<String> result = listOfLists.stream()
    .flatMap(List::stream)
    .toList();
Java

💡 ポイント:List<List> → List の平坦化。


🔟 ページング処理(limit + skip)

Before

int page = 2;
int size = 3;
for (int i = (page-1)*size; i < Math.min(page*size, list.size()); i++) {
    System.out.println(list.get(i));
}
Java

After

int page = 2;
int size = 3;
list.stream()
    .skip((page-1)*size)
    .limit(size)
    .forEach(System.out::println);
Java

💡 ポイント:ページング処理を直感的に書ける。


✅ まとめ

  • 単純ループforEach()
  • 条件付き抽出filter()
  • 変換map()
  • 重複排除distinct()
  • 集計・合計・最大値sum(), count(), average()
  • 並べ替えsorted()
  • グループ化groupingBy()
  • ネストリストの平坦化flatMap()
  • ページングskip() + limit()
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました