LoginSignup
0
0

リストの縦結合:SQL文のGroup By Order ByをJavaでやる方法

Posted at

開発環境

  • Java:8
  • IDE:Intellij
  • build:gradle

java機能

先ずリストを格納するクラスを用意する

public class Member {
    public int groupID;
    public int memberID;
    public int seatID;
    public String name;

    public Member(int groupID, int memberID, int seatID, String name) {
        this.groupID = groupID;
        this.memberID = memberID;
        this.seatID = seatID;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Member{" +
                "groupID=" + groupID +
                ", memberID=" + memberID +
                ", seatID=" + seatID +
                ", name='" + name + '\'' +
                '}';
    }
}

次にリストを操作機能を提供するクラスを作成

public class MemberListProcessor {
     
    // ①
    public List<Member> combineAndSortLists(List<Member> list1, List<Member> list2) {

        // ②
        List<Member> combinedList = new ArrayList<>(list1);
        combinedList.addAll(list2);

        // ③
        Map<Integer, List<Member>> groupedMap = combinedList.stream()
                .collect(Collectors.groupingBy(member -> member.groupID));

        // ④
        return groupedMap.values().stream()
                .flatMap(group -> group.stream()
                        .sorted(Comparator.comparingInt((Member m) -> m.memberID)
                                .thenComparingInt(m -> m.seatID)))
                .collect(Collectors.toList());
    }
}

説明

  • ①:二つのリストを結合して返すメソッド
  • ②:二つのリストを結合する
  • ③:結合したリストをgroupIDグルーピングする
  • ④:グルーピング後のリストをmemberIDseatIDでソート後返却する

テストしてみる

public class Main {
    public static void main(String[] args) {

        setMember();
    }

    public static void setMember() {
        List<Member> list1 = new ArrayList<>();
        list1.add(new Member(1, 1, 1, "A"));
        list1.add(new Member(2, 6, 5, "B"));
        list1.add(new Member(2, 4, 2, "C"));

        List<Member> list2 = new ArrayList<>();
        list2.add(new Member(2, 3, 5, "D"));
        list2.add(new Member(2, 5, 3, "E"));
        list2.add(new Member(1, 2, 4, "F"));

        MemberListProcessor pro = new MemberListProcessor();

        List<Member> combinedList = pro.combineAndSortLists(list1, list2);
        combinedList.forEach(System.out::println);
    }
}

出力結果:想定通り

Member{groupID=1, memberID=1, seatID=1, name='A'}
Member{groupID=1, memberID=2, seatID=4, name='F'}
Member{groupID=2, memberID=3, seatID=5, name='D'}
Member{groupID=2, memberID=4, seatID=2, name='C'}
Member{groupID=2, memberID=5, seatID=3, name='E'}
Member{groupID=2, memberID=6, seatID=5, name='B'}
0
0
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
0