【News】List入門:全要素のループ処理と値の加工・変換について(後編)

こんにちは、バナナドリームです。

前編では「Listの基本」と「nullの扱い方」について解説しました。後編では、Listを実践的に使いこなすために欠かせない「ループ処理」と「値の加工・変換」を取り上げます。

for文を使って要素を一つずつ処理する

JavaのListはインデックス(要素番号)を持っており、for文を使って一つずつ処理できます。

java

List<String> items = Arrays.asList("リンゴ", "バナナ", "オレンジ");

for (int i = 0; i < items.size(); i++) {

    System.out.println("項目[" + i + "]:" + items.get(i));

}

インデックスを明確に把握できるため、「偶数番目だけ処理する」「特定の位置をスキップする」といった柔軟な操作が可能です。

拡張for文(foreach)でシンプルに処理する

インデックスが不要で「全部をそのまま処理したい」場合は、拡張for文が便利です。

java

List<String> items = Arrays.asList("リンゴ", "バナナ", "オレンジ");

for (String item : items) {

    System.out.println("フルーツ:" + item);

}

読みやすく、コードがスッキリするため、開発現場でも「単純な一覧処理」の際によく使われます。

for文とforeachの使い分け

場面:インデックスを使いたい/条件付きでスキップしたい
向いている文:for文

場面:全要素を順番にそのまま処理したい
向いている文:foreach文

例えば「3番目だけをスキップしたい」場合はfor文、すべてを順に表示するだけならforeachが最適です。

注意点:

・Listにnullが含まれていると処理時に例外が起きる可能性がある(前編参照)
・要素を削除しながらループしたい場合はforeach文では対応できない

元のListを書き換える:set()を使う

ループ処理の応用として、Listの中身を加工・変換する場面は実務でも頻繁に登場します。元のListを直接書き換えたい場合は set() メソッドを使います。

java

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

for (int i = 0; i < numbers.size(); i++) {

    int doubled = numbers.get(i) * 2;

    numbers.set(i, doubled);

}

System.out.println(numbers); // → [2, 4, 6, 8, 10]

get(i) で値を取り出し、加工した値を set(i, 加工後の値) で上書きします。メモリの無駄を抑えられるのがメリットです。

新しいListに加工して格納する:add()で蓄積

元のListを残したまま加工後のデータを使いたい場合は、別のListに追加していく方法が便利です。

java

List<String> names = Arrays.asList("taro", "hanako", "jiro");

List<String> capitalized = new ArrayList<>();

for (String name : names) {

    String updated = name.substring(0, 1).toUpperCase() + name.substring(1);

    capitalized.add(updated);

}

System.out.println(capitalized); // → [Taro, Hanako, Jiro]

よくある用途としては、文字列の整形(大文字・小文字の変換)、数値の演算(ポイント加算、割引計算)、nullや空文字の除外などがあります。

ラムダ式を使えばもっとスマートに

Javaにはラムダ式やStream APIを使った書き方もあります。例えば上の例はStreamを使うとこのように書けます。

java

import java.util.stream.Collectors;

List<String> result = names.stream()

    .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1))

    .collect(Collectors.toList());

ただし初心者のうちは無理して使わなくてもOKです。処理の流れをしっかり理解してから使えば、ラムダやStreamは「コードの見た目」をスッキリさせる強い味方になります。

まとめ

・for文はインデックスを使った柔軟な制御に向いている

・foreach文はシンプルで読みやすい処理に向いている

・nullの存在や処理内容によって適切な文を選ぶことが大切

・set() で元のListを書き換え、add() で新しいListに蓄積する2パターンを使い分けよう

・慣れてきたらラムダ式・Stream APIへのステップアップも視野に

次回:「Listを絞り込むには?条件に合う要素だけ取り出すフィルタリング入門」

Listの中から「条件に合う要素だけ取り出したい」という場面は実務でも頻繁に登場します。
次回は、nullや空文字の除外、特定の条件での絞り込みなど、フィルタリングの基本を解説します。