按名称对HashMap <String [],Boolean>进行排序,该名称按升序出现在String []中

阿杰·库玛(Ajay Kumar):

我想按升序对HashMap <String [],Boolean>进行排序。我编写的这段代码可以正常工作

//HashMap<String[], Boolean> literalTable = new HashMap<>(); // declared some where in my code
ArrayList<String[]> arrayList = new ArrayList<>();
    for (int i = 0; i < literalTable.size(); ++i){
        String[] str = {};
        arrayList.add(str);
    }
    for (Map.Entry m: literalTable.entrySet()){
        String[] str = (String[]) m.getKey();
        Integer index = Integer.parseInt(str[0]);
        arrayList.set(index, str);
    }

    arrayList.sort(Comparator.comparing(p -> p[0]));

我的问题是,有什么办法可以完成相同的任务?我用Google搜索它,发现了一个解决方案,它说可以使用TreeMap,但是效果不佳。

萨拉瓦纳:

您需要将比较器传递给TreeMap构造函数以对数组字符串进行排序

Map<String[], Boolean> hashMap = new HashMap<String[], Boolean>();
hashMap.put(new String[]{"bfa", "asdfs", "gr"}, true);
hashMap.put(new String[]{"efd", "asdfs", "gr"}, true);
hashMap.put(new String[]{"asd", "asdfs", "gr"}, true);
hashMap.put(new String[]{"bfd", "asdfs", "gr"}, true);

TreeMap<String[], Boolean> treeMap = new TreeMap<>(Comparator.comparing(a -> a[0]));
treeMap.putAll(hashMap);
treeMap.forEach((k, v) -> System.out.println(Arrays.toString(k) + " " + v));

输出

[asd, asdfs, gr] true
[bfa, asdfs, gr] true
[bfd, asdfs, gr] true
[efd, asdfs, gr] true

您可以尝试按键数组中的第一个元素进行排序,并LinkedHashMap用于维持顺序

        LinkedHashMap<String[], Boolean> orderedMap = hashMap.keySet().stream()
                .sorted(Comparator.comparing(a -> a[0])) // ignore case if required
                .collect(Collectors.toMap(a -> a, a -> hashMap.get(a), (a, b) -> a, LinkedHashMap::new));
        orderedMap.forEach((k, v) -> System.out.println(Arrays.toString(k) + " " + v));

输出

[asd, asdfs, gr] true
[bfa, asdfs, gr] true
[bfd, asdfs, gr] true
[efd, asdfs, gr] true

如果第一个元素匹配则需要按下一个元素进行排序,则可以将数组隐式化为字符串并进行排序

LinkedHashMap<String[], Boolean> orderedMap = hashMap.keySet().stream()
                .sorted(Comparator.comparing(a -> Arrays.toString(a))) // ignore case if required
                .collect(Collectors.toMap(a -> a, a -> hashMap.get(a), (a, b) -> a, LinkedHashMap::new));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在包含名称和标记的结构中,按升序对名称进行冒泡排序

如何在Kotlin中按其值对HashMap <String,Int>顺序进行排序?

在Magento中按名称对产品进行排序

Map <String,Map <String,Boolean >> myMap =新的HashMap <String,HashMap <String,Boolean >>();

ArrayList <String>按名称顺序

在django中按名称排序

在api中按名称排序

使用 C# 按相同字符串出现在列表中的频率对列表进行排序

如何在工厂方法中为Hashmap <String Boolean>创建构造函数?

按列中的名称对pandas DataFrame中的数据进行排序

在C中按升序对链表进行排序

在数组中以升序对名称进行排序

将HashMap从Map <String,Boolean>反转为Map <Boolean,List <String >>

如何按值对Hashmap <String,Arraylist <String >>类型的Hashmap进行排序?

在表中按字母顺序对列名称进行排序

在Android中按名称对JSON数据进行排序

按分支名称对`git branch --all`中的分支进行排序

R:按名称对命名向量中的元素进行排序

在PHP中按名称对数组进行排序

按名称中的日期对文件数组进行排序

在 POS (js) 中按名称对产品进行排序

需要列出按Java中的名称排序

在javascript / vue中按名称排序国家

按名称对文件进行数字排序,然后按BASH中的父目录排序

按名称中的日期对JAVA中的文件数组进行排序(不按修改日期)

如何在 Kotlin 中创建 Hashmap<String,Int : String,String : String,String> 进行排序

如何填充这个 HashMap Map<Integer, Map<String, Boolean>> pr

在卡片列表中按日期和名称升序和降序

否定Kotlin中的谓词(例如(String)-> Boolean))的简单方法