Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;按字母顺序_Java - Fatal编程技术网

Java ArrayList<;HashMap<;字符串,字符串>&燃气轮机;按字母顺序

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

如何按Hashmap的键排序HashMaps的ArrayList?我在ArrayList中有一个名称和数字列表(另存为字符串)。

使用
集合。排序(列表,比较器)
并提供自定义的
比较器

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
    。这允许您按键(名称)或值或其组合进行排序


我想询问者想知道如何对HashMap的ArrayList(String,String)进行排序,因为Android需要这种结构来将menuItems添加到ListView中

您可以使用:

//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"));
}