{name: "John", age: "47"} "B" -6ren">
gpt4 book ai didi

java - 按值中的多个字段对 Map 进行排序(Map 作为值)

转载 作者:行者123 更新时间:2023-12-02 04:25:44 29 4
gpt4 key购买 nike

我有一个 Map 结构,其中包含对:String=>Map。有没有办法按多个值对这个映射(根)进行排序?清楚的示例:

输入:

"A" => {name: "John", age: "47"}
"B" => {name: "Sam", age: "60"}
"C" => {name: "Josh", age: "30"}
"D" => {name: "Tom", age: "15"}
"E" => {name: "Josh", age: "31"}

排序:

//group 1
"A" => {name: "John", age: "47"}
//group2
"C" => {name: "Josh", age: "30"}
"E" => {name: "Josh", age: "31"}
//group3
"B" => {name: "Sam", age: "60"}
//group4
"D" => {name: "Tom", age: "15"}

输出 map 首先名称排序,然后(在已排序的组内)按年龄排序。我能够按单个映射值条目进行排序,但我找不到一种简单的方法来按多个条目(按给定顺序)进行排序。我可以尝试在每次排序后拆分此结构,应用下一级排序并在最后加入所有内容,但我正在寻找更奇特的解决方案(如果有的话)。

有什么想法吗?

最佳答案

Java提供了TreeMap这将允许您指定一个比较器,它将在其中对您的输入进行排序。

要以传统方式使用TreeMap,您需要执行如下操作:

private class Person implements Comparable<Person>{
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return this.name;
}

public int getAge() {
return this.age;
}

@Override
public int compareTo(Person t) {
if(!this.getName().equals(t.getName()))
return this.getName().compareTo(t.getName());

return Integer.compare(this.getAge(), t.getAge());
}
}

private class CustomComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.compareTo(p2);
}
}

public NewClass()
{
SortedMap<Person, String> map = new TreeMap<Person, String>(new CustomComparator());

}

所以基本上你需要交换键和值对。如果这不是您想要的,那么您可以看看this以前的SO问题以获得更多答案。

关于java - 按值中的多个字段对 Map 进行排序(Map 作为值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32220387/

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