開発環境
- 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
グルーピングする - ④:グルーピング後のリストを
memberID
、seatID
でソート後返却する
テストしてみる
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'}