gpt4 book ai didi

java - 如何在 java 8 中使用 compareTo 对链表进行排序

转载 作者:行者123 更新时间:2023-11-30 10:14:23 24 4
gpt4 key购买 nike

我需要使用 compareTo() 对 StudentInfo 对象的链表 x 进行排序。

这是我的 StudentInfo 类

package mahaffy_lab4;
import java.util.*;
/**
*
* @author student
*/

public class StudentInfo implements Comparable<StudentInfo>
{

private LinkedList<Object> classes = new LinkedList<>();
private String sid, name;


public StudentInfo(String sid, String name)
{
this.sid = sid;
this.name = name;

}

public void AddClass(Object aClass)
{
classes.add(aClass);
}
@Override
public int compareTo(StudentInfo studentA)
{

return this.name.compareTo(student.name);
}
@Override
public String toString()
{
return "Name: " + name + " SID: " + sid;
}

但这就是我的问题所在。在我的主要/测试类(class)中,我尝试过的任何东西都不起作用。这是我最后一次尝试:

private LinkedList<Object> students = new LinkedList<>();

public String GetAllStudents()
{

Collections.sort(students, new Comparator<String>() {
@Override
public int compare(StudentInfo o1, StudentInfo o2) {
return Collator.getInstance().compare(o1, o2);
}
});

return students.toString();
}

如有任何帮助,我们将不胜感激。

最佳答案

这应该是你的 StudentInfoComparable上课接口(interface)实现:

class StudentInfo implements Comparable<StudentInfo> {

private final int num;

@Override
public int compareTo(StudentInfo studentA) {
return Integer.compare(num, studentA.num);
}
}

这是客户端代码:

List<StudentInfo> studentInfos = new LinkedList<>();
Collections.sort(studentInfos);

你没有提供关于比较两个的详细信息StudentInfo .在这个例子中 StudentInfo将根据他们的 num 排序.

附言为了更灵活,我建议你避免 implements Comparable<StudentInfo> .最好提供单独的比较器。此外,您可以在未来添加更多。

StudentInfo带有额外的比较器:

class StudentInfo {

private final int num;
private final String name;

public static final Comparator<StudentInfo> SORT_BY_NUM = Comparator.comparingInt(s -> s.num);

public static final Comparator<StudentInfo> SORT_BY_NAME = (s1, s2) -> {
int res = s1.name.compareToIgnoreCase(s2.name);
return res != 0 ? res : SORT_BY_NUM.compare(s1, s2);
};

}

客户端代码:

List<StudentInfo> studentInfos = new LinkedList<>();
studentInfos.sort(StudentInfo.SORT_BY_NUM); // sort by num
studentInfos.sort(StudentInfo.SORT_BY_NAME); // sort by name
studentInfos.sort(StudentInfo.SORT_BY_NAME.reversed()); // sort by name reversed order

关于java - 如何在 java 8 中使用 compareTo 对链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916955/

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