gpt4 book ai didi

java - 按两个标准排序以获得最终结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:21:17 25 4
gpt4 key购买 nike

设置如下:我有一组 Classroom 对象 {MATH |科学 |英文。我还有一个 map ,其中 Period 作为键,一组 studentIds 作为值。这是从 getPeriodStudentMappingForClassroom() 方法返回的。现在,作为输入,我得到了字符串 "MATH, ENGLISH, SCIENCE",它指示返回 studentIds 的顺序(选项的数量是固定的)。我还有另一个字符串,其中包含任意数量的句点,例如 "B, A"(可以有任意数量的句点)。这是一个示例可视化:

Classroom MATH:
Period A -> Set<Integer> studentIds
Period B -> Set<Integer> studentIds

Classroom ENGLISH:
Period A -> Set<Integer> studentIds
Period B -> Set<Integer> studentIds

作为输出,我希望返回的 studentIds 按教室和时间段排序,这样我首先得到 Period B 的所有 studentIds >。 Period B 的这些 studentIds 按类顺序 “MATH, ENGLISH, SCIENCE” 排序。然后我得到 Period AstudentIds 按类顺序 “MATH, ENGLISH, SCIENCE” 排序。例如:

Input:
String classroomOrder = "MATH, ENGLISH, SCIENCE"
String periodOrder = "B, A"
public Map<String, <Set<Integer>> getPeriodStudentMappingForClassroom(String classroom)

Output:
Set<Integer> studentIds
Ex.
Period A studentIds in Math classroom
Period A studentIds in English classroom
Period A studentIds in Science classroom
Period B studentIds in Math classroom ...

我当然可以创建任何辅助方法和结构来包含信息,但我不能更改 getPeriodStudentMappingForClassroom() 方法并且必须使用它。谁能指导我如何构建这个玩具问题解决方案?

最佳答案

我认为这是一个有趣的问题。不知道为什么还没有得到答复。假设你有一个类 ClassRoom,它封装了时间、类(class)名称和学生 ID,如下所示

public static class ClassRoom {
private String period; // A or B
private String courseName; // MATH, SCIENCE or ENGLISH
private Set<Integer> studentIds;

public ClassRoom(String period, String courseName, Integer... studentIds) {
this.period = period;
this.courseName = courseName;
this.studentIds = new HashSet<>(Arrays.asList(studentIds));
}

public String getPeriod() {
return period;
}

public String getCourseName() {
return courseName;
}

public Set<Integer> getStudentIds() {
return studentIds;
}

@Override
public String toString() {
return "Period='" + period + '\'' +
", CourseName='" + courseName + '\'' +
", studentIds=" + studentIds;
}
}

然后类的排序列表可以打印如下

    List<String> order = Arrays.asList("MATH", "ENGLISH", "SCIENCE");

classes.stream().sorted(
comparing(ClassRoom::getPeriod)
.thenComparingInt(c -> order.indexOf(c.getCourseName())))
.forEach(System.out::println);

输出

Period='A', CourseName='MATH', studentIds=[3, 4, 89, 90, 78]
Period='A', CourseName='MATH', studentIds=[34, 3, 4, 5, 6]
Period='A', CourseName='MATH', studentIds=[2, 3, 4, 5, 232]
Period='A', CourseName='SCIENCE', studentIds=[1, 2, 3, 4, 57]
Period='A', CourseName='SCIENCE', studentIds=[34, 2, 3, 5]
Period='B', CourseName='ENGLISH', studentIds=[2, 5, 7]
Period='B', CourseName='ENGLISH', studentIds=[1, 2, 34, 3, 12]

关于java - 按两个标准排序以获得最终结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com