List<Object>根据一个自定义的List<String>顺序排序,例如用户列表,需要按照名字进行自定义排序

public static void main(String[] args) {
    List<User> userList = new ArrayList<>();
    User user1 = new User("1", "A");
    User user2 = new User("2", "B");
    User user3 = new User("3", "C");
    User user4 = new User("4", "B");

    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
    userList.add(user4);

    List<String> orderList = Arrays.asList("B", "C", "A");

    userList.sort(((o1, o2) -> {
        int index1 = orderList.indexOf(o1.getName());
        int index2 = orderList.indexOf(o2.getName());

        if (index1 != -1) {
            index1 = userList.size() - index1;
        }
        if (index2 != -1) {
            index2 = userList.size() - index2;
        }

        return index2 - index1;
    }));

    userList.forEach(item -> {
        System.out.println(item.getId() + "," + item.getName());
    });
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要根据map中的对象字段排序需要先将map中的元素转换为List,再对List进行排序,最后再将排序后的List转换为Map。具体步骤如下: 1. 定义一个比较器,用于对List中的元素进行排序,如下所示: ``` public class MyComparator implements Comparator<Map.Entry<String, Map<String, List<Object>>>> { private String fieldName; public MyComparator(String fieldName) { this.fieldName = fieldName; } @Override public int compare(Map.Entry<String, Map<String, List<Object>>> o1, Map.Entry<String, Map<String, List<Object>>> o2) { // 获取要比较的字段值 Object fieldValue1 = o1.getValue().get(fieldName); Object fieldValue2 = o2.getValue().get(fieldName); // 对字段值进行比较,并返回比较结果 if (fieldValue1 instanceof Comparable && fieldValue2 instanceof Comparable) { return ((Comparable) fieldValue1).compareTo((Comparable) fieldValue2); } else { return 0; } } } ``` 2. 将Map转换为List,并对List中的元素进行排序,如下所示: ``` // 原始的Map Map<String, Map<String, List<Object>>> map = new HashMap<>(); // 将Map转换为List List<Map.Entry<String, Map<String, List<Object>>>> list = new ArrayList<>(map.entrySet()); // 对List中的元素进行排序 Collections.sort(list, new MyComparator("fieldName")); ``` 3. 将排序后的List转换为Map,如下所示: ``` // 创建一个新的Map,并将排序后的List中的元素加入到新的Map中 Map<String, Map<String, List<Object>>> sortedMap = new LinkedHashMap<>(); for (Map.Entry<String, Map<String, List<Object>>> entry : list) { sortedMap.put(entry.getKey(), entry.getValue()); } ``` 这里使用LinkedHashMap来创建新的Map,可以保留原始Map中元素的插入顺序需要注意的是,如果要对Map中的非Comparable类型字段进行排序需要在比较器中进行处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值