gpt4 book ai didi

java - 使用带有字符串和单独类的 Map 对集合进行排序

转载 作者:行者123 更新时间:2023-12-02 00:27:15 28 4
gpt4 key购买 nike

我基本上试图将学生和分数的输入文件按字母和数字顺序排序。我有 4 个类(class),但是我无法让它以任何顺序打印带有标记的学生。更不用说按字母和数字顺序排列了。非常感谢我如何获得总体打印结果或任何帮助。下面是我用于 4 个类和输入文件的代码。

输入文件:

Simon 4
Anna 10
Simon 4
Anna 9
Anna 5
Edward 10

代码:

package part1;
import java.io.FileReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, StudentMath> map = new HashMap<String, StudentMath>();
String input = "data/results.txt";
Scanner scan = new Scanner(new FileReader(input));
while (scan.hasNextLine()) {
String line = scan.nextLine();
String[] in = line.split(" ");
String name = in[0];
int mark = Integer.parseInt(in[1]);
//System.out.println(name + ":" + mark);
StudentMath stud = map.get(name);
if (stud == null) {
stud = new StudentMath(name, mark);
map.put(name, stud);
stud.sum(mark);
}

}
for (String s: map.keySet()){
System.out.println(s);
}
}
}

package part1;

public class StudentMath extends Main {

public String name;
public int mark;

public StudentMath(String s, int n) {
name = s;
mark = n;
}

public String getName() {
return name;

}
public int getMark() {
return mark;
}

public int sum() {
int tot = mark + mark;
return tot;
}

public boolean equals(Object o) {
if (o instanceof StudentMath) {
StudentMath m = (StudentMath) o;
return (name == m.name) && (mark == m.mark);

}
else {
return false;
}
}
}

package part1;

import java.util.Comparator;

public class NameCompare implements Comparator<StudentMath> {
public int compare(StudentMath g1, StudentMath g2) {
return g1.name.compareTo(g2.name);
}
}


package part1;


import java.util.Comparator;

public class MarkCompare implements Comparator<StudentMath>{

public int compare(StudentMath g1, StudentMath g2) {
return g2.mark - g1.mark;
}
}

最佳答案

HashMap 是一个无序集合,因此它没有定义其键的排序。这就是为什么您以随机顺序获得输出的原因。

您可以尝试使用有序集合类型,例如 List(ArrayListLinkedList),或者如果您确实需要一个 Map 然后你可以查看 TreeMap 类。 TreeMap 是一个 Map 实现,它知道如何对其键进行排序。请注意,TreeMap 无法按值排序,因此它可能不是此处使用的正确数据结构,因为您无法(轻松)使用它按标记排序。

我不会给你代码,因为这显然是家庭作业,但希望这能让你走上正轨。

编辑:解决以下评论:有序排序不同。要实际按照您想要的顺序对 List 进行排序,请查看 Collections.sort 方法。

关于java - 使用带有字符串和单独类的 Map 对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9753368/

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