入門 ローカル(VS Code + Java) 約20分

オブジェクトの一覧を扱う

ArrayList と for 文を使い、オブジェクトの一覧を表示したり条件で絞ったりするレッスン。

前回、Student クラスで名前と点数をまとめられるようになりました。今度はその Student を ArrayList に入れて、「学生の一覧」として管理します。このパターンは、あとで Spring Boot でデータベースの一覧を扱うときにそのまま使います。

引き続き VS Code とローカルの Java 環境を使います。

Student を ArrayList に入れる

ArrayList には String や Integer だけでなく、自分で作ったクラスのオブジェクトも入れられます。

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("田中", 80));
    students.add(new Student("佐藤", 70));
    students.add(new Student("鈴木", 90));

    System.out.println("人数: " + students.size());
  }
}

class Student {
  String name;
  int score;

  Student(String name, int score) {
    this.name = name;
    this.score = score;
  }
}
人数: 3

ArrayList<Student> は「Student を入れる ArrayList」です。<String> のときと同じ書き方で、自分のクラスも入れられます。

for 文で一覧を表示する

拡張 for 文を使うと、リスト内の Student を1人ずつ取り出して処理できます。

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("田中", 80));
    students.add(new Student("佐藤", 70));
    students.add(new Student("鈴木", 90));

    for (Student s : students) {
      System.out.println(s.name + ": " + s.score + "点");
    }
  }
}

class Student {
  String name;
  int score;

  Student(String name, int score) {
    this.name = name;
    this.score = score;
  }
}
田中: 80点
佐藤: 70点
鈴木: 90点

for (Student s : students) は「students の中身を1つずつ s に入れてくり返す」です。ArrayList の回で見た拡張 for 文と同じ構文をそのまま使えます。

条件で絞り込む

for と if を組み合わせると、条件に合う Student だけを処理できます。

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("田中", 80));
    students.add(new Student("佐藤", 70));
    students.add(new Student("鈴木", 90));
    students.add(new Student("高橋", 55));
    students.add(new Student("伊藤", 85));

    System.out.println("--- 80点以上 ---");
    for (Student s : students) {
      if (s.score >= 80) {
        System.out.println(s.name + ": " + s.score + "点");
      }
    }
  }
}

class Student {
  String name;
  int score;

  Student(String name, int score) {
    this.name = name;
    this.score = score;
  }
}
--- 80点以上 ---
田中: 80点
鈴木: 90点
伊藤: 85点

for で全員を回し、if で 80 点以上の学生だけを表示しています。前の回で学んだ for + if のパターンが、オブジェクトの一覧でもそのまま使えます。

一覧処理をメソッドに切り出す

表示処理を main から切り出して、メソッドにまとめます。

import java.util.ArrayList;

public class Main {
  public static void main(String[] args) {
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("田中", 80));
    students.add(new Student("佐藤", 70));
    students.add(new Student("鈴木", 90));
    students.add(new Student("高橋", 55));
    students.add(new Student("伊藤", 85));

    printAll(students);
    printAbove(students, 80);
  }

  static void printAll(ArrayList<Student> list) {
    System.out.println("--- 全員 ---");
    for (Student s : list) {
      System.out.println(s.name + ": " + s.score + "点");
    }
  }

  static void printAbove(ArrayList<Student> list, int threshold) {
    System.out.println("--- " + threshold + "点以上 ---");
    for (Student s : list) {
      if (s.score >= threshold) {
        System.out.println(s.name + ": " + s.score + "点");
      }
    }
  }
}

class Student {
  String name;
  int score;

  Student(String name, int score) {
    this.name = name;
    this.score = score;
  }
}
--- 全員 ---
田中: 80点
佐藤: 70点
鈴木: 90点
高橋: 55点
伊藤: 85点
--- 80点以上 ---
田中: 80点
鈴木: 90点
伊藤: 85点

main は「何をするか」だけを書き、「どうやるか」はメソッドに任せています。コードが長くなっても main の見通しが良い状態を保てます。

ここまでの道具と次のステップ

ここまで学んだ要素を振り返ります。

要素学んだ回
変数・型変数と型
計算・%計算と演算子
if / else条件分岐
for 文繰り返し
メソッドメソッドの基本
配列配列の基本
ArrayListArrayList の基本
クラス・オブジェクトクラスとオブジェクト
オブジェクトの一覧この回

今回の「一覧を作る → 全件表示 → 条件で絞る」は、Web アプリの CRUD(作成・読み取り・更新・削除)の「読み取り(一覧表示)」にあたります。Spring Boot に入ったとき、データベースから取得した一覧を同じパターンで扱います。

次の回へ

次の Part では、HTML・CSS・JavaScript の最小セットを学びます。Web アプリは「画面(フロント)」と「サーバー(Java / Spring Boot)」の両方で成り立っているので、画面側の基礎を先に押さえます。