IT学習を始めたばかりの頃は、
- 「クラスって何?」
- 「Listって何のために使うの?」
- 「Streamって結局何が便利なの?」
といった疑問を持つ方が多いと思います。
今回は とてもシンプルな本管理プログラムを通して、
Java の基礎的な考え方をまとめて学習してみました。
今回作成したプログラムの概要
本の情報を管理し、条件に応じて検索できる簡単なプログラムを作成しました。
扱う情報
- タイトル
- 著者
- 管理番号
実装した検索機能
- タイトルで検索
- 著者で検索
- 管理番号で検索
実行結果
[おはよう,佐藤,1]
[こんばんは,木村,3]
[さようなら,田中,4]
コード例
Main.java
package org.example;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
Book book = new Book("おはよう", "佐藤", 1);
Book book2 = new Book("こんにちは", "加藤", 2);
Book book3 = new Book("こんばんは", "木村", 3);
Book book4 = new Book("さようなら", "田中", 4);
List<Book> bookList = new ArrayList<>(Arrays.asList(book, book2, book3, book4));
Library library = new Library();
System.out.println(library.serchByTitle(bookList, "おはよう"));
System.out.println(library.serchByAuthor(bookList, "木村"));
System.out.println(library.serchByNumber(bookList, 4));
}
}
Book.java
package org.example;
public class Book {
String title;
String author;
int number;
public Book(String title, String author, int number) {
this.title = title;
this.author = author;
this.number = number;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public int getNumber() {
return number;
}
@Override
public String toString() {
return title + "," + author + "," + number;
}
}
Library.java
package org.example;
import java.util.List;
public class Library {
// タイトル検索
public List<Book> serchByTitle(List<Book> bookList, String title) {
return bookList.stream()
.filter(v -> v.getTitle().equals(title))
.toList();
}
// 著者検索
public List<Book> serchByAuthor(List<Book> bookList, String author) {
return bookList.stream()
.filter(v -> v.getAuthor().equals(author))
.toList();
}
// 番号検索
public List<Book> serchByNumber(List<Book> bookList, int number) {
return bookList.stream()
.filter(v -> v.getNumber() == number)
.toList();
}
}
このプログラムを通して学べること
① クラスの役割を分ける考え方
-
Book
→ データを表すクラス -
Library
→ 処理(検索)を行うクラス -
Main
→ プログラムの実行を担当
「1つのクラスに全部書かない」
というオブジェクト指向の基本を学べます。
② List は「複数のデータ」を扱うためのもの
List<Book> bookList
- 同じ型のデータをまとめて扱える
- 検索や並び替えがしやすい
実務では List を使わない日はほぼありません。
③ Stream を使った検索処理
bookList.stream()
.filter(v -> v.getAuthor().equals(author))
.toList();
これは、
- リストの中から
- 条件に合うものだけを取り出して
- 新しい List として返す
という処理を とても読みやすく書いています。
④ 「表示」と「処理」を分ける重要性
- 検索結果は
List<Book>として返す - 表示は
System.out.println()に任せる - 表示形式は
toString()にまとめる
この分離ができると、
- 修正が楽
- コードが読みやすい
- バグが減る
というメリットがあります。
⑤ toString() の役割
@Override
public String toString() {
return title + "," + author + "," + number;
}
これを実装することで、
System.out.println(book);
System.out.println(bookList);
と書くだけで、中身が分かるようになります。
デバッグやログ出力で非常に重要なポイントです。
まとめ
この「簡単な処理」の中には、
- クラス設計
- List の使い方
- Stream の基本
- toString() の意味
- 処理と表示の分離
といった Java の土台となる考え方が詰まっています。