gpt4 book ai didi

Java:排序Map>类型的Map

转载 作者:行者123 更新时间:2023-11-29 05:20:13 25 4
gpt4 key购买 nike

我有一个 Map,它以 String 作为键,以 ArrayList 作为值。ArrayList 基本上是一个以某种方式链接到键的四个值的列表。

我的示例数据是:

String : [ArrayList<String>] 

"USA": ["25", "5", "20", "4"]
"India": ["15", "7", "8", "2"]
"Canada": ["29", "17", "8", "6"]

我需要根据 ArrayList 中的第一个值按降序对这个 Map 进行排序,因此它变成如下所示:

"Canada": ["29", "17", "8", "6"]
"USA": ["25", "5", "20","4"]
"India": ["15", "7", "8", "2"]

我正在尝试下面的函数,但它不适用于 ArrayList 类型的映射值:

public class MapUtil
{
public static <K, V extends Comparable<? super V>> Map<K, V>
sortByValue( Map<K, V> map )
{
List<Map.Entry<K, V>> list =
new LinkedList<Map.Entry<K, V>>( map.entrySet() );
Collections.sort( list, new Comparator<Map.Entry<K, V>>()
{
public int compare( Map.Entry<K, V> o1, Map.Entry<K, V> o2 )
{
return (o1.getValue()).compareTo( o2.getValue() );
}
} );

Map<K, V> result = new LinkedHashMap<K, V>();
for (Map.Entry<K, V> entry : list)
{
result.put( entry.getKey(), entry.getValue() );
}
return result;
}
}

如何修改这个函数来实现我需要的?

最佳答案

您正在比较整个 ArrayList<String>值,但您想比较每个 ArrayList 中的第一个值.

你应该这样做:

    public int compare(Map.Entry<String, ArrayList<String>> o1, Map.Entry<String, ArrayList<String>> o2)
{
return (o1.getValue().get(0)).compareTo( o2.getValue().get(0) );
}

当然,您应该添加空值检查,以防 o1.getValue() 返回空值或空列表。

但是,您应该注意,这会将值作为字符串进行比较(例如“5”>“23”),而不是数字。如果你想要一个数字比较,你应该将字符串转换为整数,或者首先将它们存储为整数。

关于Java:排序Map<String, ArrayList<String>>类型的Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123940/

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