前回、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 文 | 繰り返し |
| メソッド | メソッドの基本 |
| 配列 | 配列の基本 |
| ArrayList | ArrayList の基本 |
| クラス・オブジェクト | クラスとオブジェクト |
| オブジェクトの一覧 | この回 |
今回の「一覧を作る → 全件表示 → 条件で絞る」は、Web アプリの CRUD(作成・読み取り・更新・削除)の「読み取り(一覧表示)」にあたります。Spring Boot に入ったとき、データベースから取得した一覧を同じパターンで扱います。
次の回へ
次の Part では、HTML・CSS・JavaScript の最小セットを学びます。Web アプリは「画面(フロント)」と「サーバー(Java / Spring Boot)」の両方で成り立っているので、画面側の基礎を先に押さえます。