ここでは、実務でよく使う「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);
}
JavaAfter(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);
JavaAfter
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());
}
JavaAfter
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());
}
}
JavaAfter
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);
JavaAfter
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);
JavaAfter
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);
}
JavaAfter
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);
}
JavaAfter
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));
}
JavaAfter
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()

