List<HashMap<String, Object>>排序

如果列表中的元素类型是List<HashMap<String, Object>>,排序时需要考虑到value可能是任意类型的对象。在这种情况下,你可以针对具体的类型进行比较,或者使用Comparable接口来确保对象可以被正确比较。

示例代码

假设我们想要根据value的字符串表示来进行排序,可以使用toString()方法将Object转换为String,然后进行比较。下面是一个示例:

java 复制代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SortByValue {

    public static void main(String[] args) {
        // 示例数据
        List<HashMap<String, String>> listOfMaps = new ArrayList<>();
        HashMap<String, String> map1 = new HashMap<>();
        map1.put("key1", "value3");
        map1.put("key2", "value2");
        listOfMaps.add(map1);

        HashMap<String, String> map2 = new HashMap<>();
        map2.put("key3", "value1");
        map2.put("key4", "value4");
        listOfMaps.add(map2);

        HashMap<String, String> map3 = new HashMap<>();
        map3.put("key5", "value5");
        map3.put("key6", "value1");
        listOfMaps.add(map3);

        // 排序
        List<HashMap<String, String>> sortedList = sortByValue(listOfMaps);

        // 输出结果
        System.out.println(sortedList);
    }

    public static List<HashMap<String, String>> sortByValue(List<HashMap<String, String>> listOfMaps) {
        Collections.sort(listOfMaps, new Comparator<HashMap<String, String>>() {
            @Override
            public int compare(HashMap<String, String> o1, HashMap<String, String> o2) {
                // 获取第一个键的值进行比较
                Iterator<Map.Entry<String, String>> iterator1 = o1.entrySet().iterator();
                Map.Entry<String, String> entry1 = iterator1.hasNext() ? iterator1.next() : null;
                
                Iterator<Map.Entry<String, String>> iterator2 = o2.entrySet().iterator();
                Map.Entry<String, String> entry2 = iterator2.hasNext() ? iterator2.next() : null;
                
                // 比较两个value
                if (entry1 != null && entry2 != null) {
                    return entry1.getValue().compareTo(entry2.getValue());
                }
                return 0;
            }
        });

        return listOfMaps;
    }
}

上面是升序排序,如果想降序排序,写成entry2.getValue().compareTo(entry1.getValue());就行了

如果是jdk1.8及以上,使用流来处理更简洁

java 复制代码
public static List<HashMap<String, String>> sortByValue(List<HashMap<String, String>> listOfMaps) {
        return listOfMaps.stream()
                .sorted(Comparator.comparing(map -> {
                    // 获取第一个键的值进行比较
                    return map.values().iterator().next();
                }))
                .collect(Collectors.toList());
    }
相关推荐
山顶风景独好2 小时前
【Leetcode】随笔
数据结构·算法·leetcode
科大饭桶3 小时前
C++入门自学Day11-- String, Vector, List 复习
c语言·开发语言·数据结构·c++·容器
Cx330❀5 小时前
【数据结构初阶】--排序(四):归并排序
c语言·开发语言·数据结构·算法·排序算法
艾莉丝努力练剑5 小时前
【C语言16天强化训练】从基础入门到进阶:Day 1
c语言·开发语言·数据结构·学习
番薯大佬6 小时前
编程算法实例-冒泡排序
数据结构·算法·排序算法
ankleless6 小时前
数据结构(03)——线性表(顺序存储和链式存储)
数据结构·考研·链表·顺序表·线性表
KarrySmile6 小时前
Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
数据结构·算法·双指针·滑动窗口·不定长滑动窗口·最大连续1的个数·最长子数组
七仔的博客8 小时前
【摸鱼办公神器】七仔的桌面工具超进化 -> 灵卡面板 v1.1.9
windows·神器·摸鱼
码农阿豪8 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
CC__xy16 小时前
demo 通讯录 + 城市选择器 (字母索引左右联动 ListItemGroup+AlphabetIndexer)笔记
windows