gpt4 book ai didi

java - 如何根据对象的属性对对象进行排序?

转载 作者:行者123 更新时间:2023-11-30 11:38:02 25 4
gpt4 key购买 nike

除了 sort 方法之外,我让其他所有东西都能正常工作。我需要根据学生的第一个属性对 HashMap 中的学生进行排序。我需要排序方法在我将所有学生添加到 HashMap 之后发生,而不是在添加时发生。

package HashMap;

import java.io.InputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;

public class clubMapping {
HashMap<String, HashSet<Student>> map = new HashMap<String, HashSet<Student>>();

public clubMapping(String clubName) {
InputStream is = getClass().getClassLoader().getResourceAsStream(
"student.txt");
Scanner scan = new Scanner(is);
while (scan.hasNext())
add(scan.next(), scan.next(), Integer.parseInt(scan.next()),
scan.next());
scan.close();
System.out.println(map);
System.out.println();
System.out.println(map.get(clubName));
}

public void add(String last, String first, Integer id, String club) {
HashSet<Student> set = new HashSet<Student>();
if (!map.containsKey(club)) {
set.add(new Student(last, first, id));
map.put(club, set);
} else {
set = map.get(club);
set.add(new Student(last, first, id));
}
}

public static void main(String[] args) {
new clubMapping("Math");
}
}

package HashMap;

public class Student {
String last, first;
Integer id;

public Student(String l, String f, Integer i) {
last = l;
first = f;
id = i;
}

public String toString() {
return last + " " + first + " " + id;
}
}

最佳答案

对于学生集,您应该使用 TreeSet 而不是 HashSet。树集是隐式排序的,而哈希集不是。

public void add(String last, String first, Integer id, String club) {
TreeSet<Student> set = new TreeSet<Student>(studentComp);
if (!map.containsKey(club)) {
set.add(new Student(last, first, id));
map.put(club, set);
} else {
set = map.get(club);
set.add(new Student(last, first, id));
}
}

但是您必须定义一个用于排序的比较器,如下所示。

private static Comparator<Student> studentComp = new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return (s1.last.compareTo(s2.last));
}
};

此外,您可能应该将您的学生属性封装在 getter/setter 方法中,而不是像我上面那样直接访问它们(正如您的类(class)目前允许的那样)。

关于java - 如何根据对象的属性对对象进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773662/

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