😎

Javaでリストを別のリストで指定した順番に並び替える

2022/01/14に公開

リストを並び替える際に昇順などではなく、別にリストで指定した順番で並び替える方法です。

record Person(String name, String hobby) {}

var people = List.of(
    new Person("一郎", "サッカー"),
    new Person("二郎", "バイオリン"),
    new Person("三郎", "音楽鑑賞"),
    new Person("四郎", "ドラマ鑑賞"),
    new Person("五郎", "ソフトボール"));

var specifyOrder = List.of("四郎", "五郎", "一郎", "三郎", "二郎");

people.stream()
    .sorted((c1, c2) -> Integer.compare(specifyOrder.indexOf(c1.name), specifyOrder.indexOf(c2.name)))
    .forEach(System.out::println);
結果
Person[name=四郎, hobby=ドラマ鑑賞]
Person[name=五郎, hobby=ソフトボール]
Person[name=一郎, hobby=サッカー]
Person[name=三郎, hobby=音楽鑑賞]
Person[name=二郎, hobby=バイオリン]

Discussion