Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;按字母顺序
如何按Hashmap的键排序HashMaps的ArrayList?我在ArrayList中有一个名称和数字列表(另存为字符串)。使用Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;按字母顺序,java,Java,如何按Hashmap的键排序HashMaps的ArrayList?我在ArrayList中有一个名称和数字列表(另存为字符串)。使用集合。排序(列表,比较器)并提供自定义的比较器: Collections.sort(list, new Comparator<Map<String,String>>() { @Override public int compare(Map<String,String> o1, Map<String,String> o2) { retu
集合。排序(列表,比较器)
并提供自定义的比较器
:
Collections.sort(list, new Comparator<Map<String,String>>() {
@Override
public int compare(Map<String,String> o1, Map<String,String> o2) {
return /* your comparison here */;
}
});
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(映射o1,映射o2){
返回/*您在此处的比较*/;
}
});
编辑:正如其他编辑指出的,您可能误用了HashMap。我上面的回答就是你所问问题的答案,那就是“我怎样才能对地图列表进行排序?”我将把它留在这里,以待将来的繁荣 我想您的理想解决方案应该是一个具有自然顺序的自定义类(实现
Comparable
)来保存某个特定人员的所有信息,然后将其对象添加到排序集
,例如树集
,让我们看看
该计划:
import java.util.*;
public class SortMap {
public static void main( String [] args ) {
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
list.add( getMap("Zen", "0"));
list.add( getMap("April", "0.5"));
list.add( getMap("Oscar", "1") );
list.add( getMap("Luca", "2") );
System.out.println( "Before: "+ list );
Collections.sort( list, new Comparator<Map<String,String>>(){
public int compare( Map<String,String> one, Map<String,String> two ) {
return one.keySet().iterator().next().compareTo( two.keySet().iterator().next() );
}
});
System.out.println( "After: "+ list );
}
private static Map<String,String> getMap(String key, String value ) {
Map<String,String> map = new HashMap<String,String>();
map.put(key,value);
return map;
}
}
这就是你在看的吗
编辑(阅读以防您正在寻找)
通过为作业使用正确的数据结构,这将是一种更好的实现方法
class SortMapBetter {
public static void main( String [] args ) {
Map<String,String> sortedMap = new TreeMap<String,String>();
sortedMap.put("Zen", "0");
sortedMap.put("April", "0.5");
sortedMap.put("Oscar", "1");
sortedMap.put("Luca", "2");
System.out.println( sortedMap );
}
}
$ java SortMapBetter
{April=0.5, Luca=2, Oscar=1, Zen=0}
class排序器{
公共静态void main(字符串[]args){
Map sortedMap=newtreemap();
分类地图放置(“Zen”,“0”);
分类地图put(“四月”、“0.5”);
分类地图放置(“奥斯卡”,“1”);
分类地图放置(“卢卡”,“2”);
系统输出打印项次(分类地图);
}
}
$java SORTMAPBETER
{April=0.5,Luca=2,Oscar=1,Zen=0}
我在arralist中有一个名称和数字列表(另存为字符串)
我认为这里真正的问题(即为什么您在描述和实现它时遇到困难)是您使用了错误的数据结构。如果ArrayList中的对象是列表,则不应使用HashMaps表示它们。哈希映射不是对的列表,因为它们不保留对的顺序。听上去,您需要保留该顺序,以便在较大的ArrayList中为“成对列表”数据结构排序提供标准
如果我的理解是正确的,那么您将很难订购ArrayList。。。直到解决了内部“列表”如何表示的问题。目前尚不清楚该修复应该是什么:
- 也许它需要是
,其中ArrayList
是一个简单的元组。这将允许您根据列表元素的插入顺序对列表进行排序Pair
- 也许它需要是
。这还允许您根据列表元素的插入顺序对列表进行排序,同时仍然支持按名称快速查找。。。如果这很重要的话LinkedHashMap
- 也许它需要是
。这允许您按键(案例中的名称)排序TreeMap
- 也许它需要是
。这允许您按键(名称)或值或其组合进行排序TreeSet
//Sort the filenames by songTitle
Collections.sort(Arraylist,new Comparator<HashMap<String,String>>(){
public int compare(HashMap<String,String> mapping1,HashMap<String,String> mapping2){
return mapping1.get("Name").compareTo(mapping2.get("Name"));
}
//按songTitle对文件名排序
Collections.sort(Arraylist,newcomparator(){
公共int比较(HashMap映射1、HashMap映射2){
返回mapping1.get(“Name”).compareTo(mapping2.get(“Name”));
}
大多数情况下,哈希映射都有相同的键,因此您可以使用我的代码。(您可以将“名称”更改为您的键。发布您的代码。为什么您需要哈希映射列表?似乎您应该使用一个分类映射,例如。我发现这个问题有点含糊不清。如果以下
ArrayList
被“排序”,那么预期的输出是什么:[,],[,]
?@ryanproyogo:[,],[,]因为他有:名称和数字,并希望按键按字母顺序排列,但是!。我可能错了。只有Luca知道谢谢!这是我的错!我选择了错误的数据结构..可能更适合树状图。我使用哈希图,因为我需要用数字存储名称,但我可以用各种方式。我是Java世界的新手..:s+1 m也许我们永远都不会知道,直到卢卡决定在问题中添加更多细节;)这帮了我的忙……干杯,伙计
//Sort the filenames by songTitle
Collections.sort(Arraylist,new Comparator<HashMap<String,String>>(){
public int compare(HashMap<String,String> mapping1,HashMap<String,String> mapping2){
return mapping1.get("Name").compareTo(mapping2.get("Name"));
}