0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaのリスト操作チートシート

Last updated at Posted at 2025-09-22

背景

Javaのリストの操作、たまに忘れがちだな…ってことで自分への備忘録も兼ねてまとめてみます。
定義更新していきます。

今回ご紹介するリストの操作

  1. 年齢が最大値
  2. 年齢が最小値
  3. 指定の年齢に一致する要素 (例: 25歳)
  4. 指定の名前に一致する要素 (例: "烈海王")
  5. 指定の性別に一致する要素全て (例: Female)
  6. リストAとリストBで、リストAに含まれる値のみ抽出
  7. リストAとリストBで重複を除いてマージしたリストCを作る(名前で重複排除)

コード

public class Student {
	private String name;
	private int no;
	private String gender;
	private int age;

	public Student(String name, int no, String gender, int age) {
		this.name = name;
		this.no = no;
		this.gender = gender;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public int getNo() {
		return no;
	}

	public String getGender() {
		return gender;
	}

	public int getAge() {
		return age;
	}

	@Override
	public String toString() {
		return "Student{" + "name='" + name + '\'' + ", no=" + no + ", gender='" + gender + '\'' + ", age=" + age + '}';
	}
}

import java.util.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        List<Student> studentsA = new ArrayList<>();

		studentsA.add(new Student("範馬刃牙", 1, "Male", 18));
		studentsA.add(new Student("範馬勇次郎", 2, "Male", 40));
		studentsA.add(new Student("花山薫", 3, "Male", 19));
		studentsA.add(new Student("愚地独歩", 4, "Male", 50));
		studentsA.add(new Student("烈海王", 5, "Male", 30));
		studentsA.add(new Student("ジャック・ハンマー", 6, "Male", 25));
		studentsA.add(new Student("郭海皇", 7, "Male", 146));
		studentsA.add(new Student("渋川剛気", 8, "Male", 75));
		studentsA.add(new Student("本部以蔵", 9, "Male", 45));
		studentsA.add(new Student("松本梢江", 10, "Female", 18));

		List<Student> studentsB = new ArrayList<>();

		// studentsAにもいる3人
		studentsB.add(new Student("範馬刃牙", 1, "Male", 18));
		studentsB.add(new Student("烈海王", 2, "Male", 30));
		studentsB.add(new Student("松本梢江", 3, "Female", 18));

		// 新しい7人
		studentsB.add(new Student("ドリアン", 4, "Male", 60));
		studentsB.add(new Student("シコルスキー", 5, "Male", 28));
		studentsB.add(new Student("スペック", 6, "Male", 97));
		studentsB.add(new Student("柳龍光", 7, "Male", 70));
		studentsB.add(new Student("ピクル", 8, "Male", 2000000)); // 氷漬け恐竜時代
		studentsB.add(new Student("ビスケット・オリバ", 9, "Male", 35));
		studentsB.add(new Student("ガイア", 10, "Male", 29));

		// 1. 年齢が最大値
		int maxAge = studentsA.stream().mapToInt(Student::getAge).max().orElseThrow(); // もしリストが空なら例外
		System.out.println("最大年齢: " + maxAge);

		// 2. 年齢が最小値
		int minAge = studentsA.stream().mapToInt(Student::getAge).min().orElseThrow(); // もしリストが空なら例外
		System.out.println("最小年齢: " + minAge);

		// 3. 指定の年齢に一致する要素 (例: 25歳)
		Student student = studentsA.stream().filter(s -> s.getAge() == 25).findFirst().orElse(null);  // 該当がない場合null
		System.out.println("25歳の学生: " + student);

		// 4. 指定の名前に一致する要素 (例: "烈海王")
		student = studentsA.stream().filter(s -> s.getName().equals("烈海王")).findFirst().orElse(null);
		System.out.println("名前が烈海王: " + student);

		// 5. 指定の性別に一致する要素全て (例: Female)
		List<Student> females = studentsA.stream().filter(s -> s.getGender().equals("Female")).collect(Collectors.toList());
		System.out.println("性別 Female の学生: " + females);

		// 6. リストAとリストBで、リストAに含まれる値のみ抽出
		List<Student> onlyInA = studentsA.stream().filter(a -> studentsB.stream().noneMatch(b -> b.getName().equals(a.getName()))).collect(Collectors.toList());

		System.out.println("Aにしかいない学生: " + onlyInA);

        // 7. リストAとリストBで重複を除いてマージしたリストCを作る(名前で重複排除)
        List<Student> studentsC = Stream.concat(studentsA.stream(), studentsB.stream())
			.collect(Collectors.collectingAndThen(Collectors.toMap(Student::getName, s -> s, (s1, s2) -> s1), // name をキーにして重複排除
					m -> new ArrayList<>(m.values())));

		System.out.println("マージ後 (名前で重複排除): " + studentsC);
    }
}


結果

    1. 最大年齢: 146
    1. 最小年齢: 18
    1. 25歳の学生: Student{name='ジャック・ハンマー', no=6, gender='Male', age=25}
    1. 名前が烈海王: Student{name='烈海王', no=5, gender='Male', age=30}
    1. 性別 Female の学生: [Student{name='松本梢江', no=10, gender='Female', age=18}]
    1. Aにしかいない学生: [Student{name='範馬勇次郎', no=2, gender='Male', age=40}, Student{name='花山薫', no=3, gender='Male', age=19}, Student{name='愚地独歩', no=4, gender='Male', age=50}, Student{name='ジャック・ハンマー', no=6, gender='Male', age=25}, Student{name='郭海皇', no=7, gender='Male', age=146}, Student{name='渋川剛気', no=8, gender='Male', age=75}, Student{name='本部以蔵', no=9, gender='Male', age=45}]
    1. マージ後 (名前で重複排除): [Student{name='烈海王', no=5, gender='Male', age=30}, Student{name='愚地独歩', no=4, gender='Male', age=50}, Student{name='ピクル', no=8, gender='Male', age=2000000}, Student{name='スペック', no=6, gender='Male', age=97}, Student{name='松本梢江', no=10, gender='Female', age=18}, Student{name='郭海皇', no=7, gender='Male', age=146}, Student{name='ジャック・ハンマー', no=6, gender='Male', age=25}, Student{name='範馬刃牙', no=1, gender='Male', age=18}, Student{name='ビスケット・オリバ', no=9, gender='Male', age=35}, Student{name='ガイア', no=10, gender='Male', age=29}, Student{name='柳龍光', no=7, gender='Male', age=70}, Student{name='ドリアン', no=4, gender='Male', age=60}, Student{name='範馬勇次郎', no=2, gender='Male', age=40}, Student{name='シコルスキー', no=5, gender='Male', age=28}, Student{name='本部以蔵', no=9, gender='Male', age=45}, Student{name='花山薫', no=3, gender='Male', age=19}, Student{name='渋川剛気', no=8, gender='Male', age=75}]
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?