求所有的分组可能 其中不可以重复
请用代码做出来
@Data
public class Group{
private int personA;
private int personB;
private int personC;
}
public class GroupTest {
public static void main(String[] args) {
// 集合模拟班级中的 37个人
List<Integer> personList = new ArrayList<>();
for (int i = 1;i<38;i++ ) {
personList.add(i);
}
List<Group> groupList = new ArrayList<>();
for (int i = 0; i<personList.size();i++) {
for (int j = 0; j<personList.size();j++) {
for (int k = 0; k<personList.size();k++) {
Group group = new Group();
group.setPersonA(personList.get(i));
group.setPersonB(personList.get(j));
group.setPersonC(personList.get(k));
groupList.add(group);
}
}
}
// 过滤掉分组中有重复的人的组合
List<Group> groupListOne = groupList.stream().filter(t -> t.getPersonA()!=t.getPersonB() && t.getPersonA() != t.getPersonC() && t.getPersonB() != t.getPersonC()).collect(Collectors.toList());
// 组合中排序
List<Group> groupListTwo = groupListOne.stream().map(t -> {
int max=(t.getPersonA()>t.getPersonB()? t.getPersonA():t.getPersonB())>t.getPersonC()? (t.getPersonA()>t.getPersonB()? t.getPersonA():t.getPersonB()):t.getPersonC();
int min=(t.getPersonA()<t.getPersonB()? t.getPersonA():t.getPersonB())<t.getPersonC()? (t.getPersonA()<t.getPersonB()? t.getPersonA():t.getPersonB()):t.getPersonC();
Group group = new Group();
group.setPersonA(min);
group.setPersonB(t.getPersonA()+t.getPersonB()+t.getPersonC()-min-max);
group.setPersonC(max);
return group ;
}).collect(Collectors.toList());
// 最终的结果
Set<Group> result = new HashSet<>();
result.addAll(groupListTwo);
System.out.println("一共有" + result.size() + "种分组,如下:");
for (Group group: result ) {
System.out.println(group.getPersonA()+"-"+group.getPersonB()+"-"+group.getPersonC());
}
}
}
我哪里理解错了么?