返回顶部
首页 > 资讯 > 后端开发 > JAVA >Map按单个或多个Value排序,当Value相同时按Key排序
  • 344
分享到

Map按单个或多个Value排序,当Value相同时按Key排序

javajvm开发语言 2023-08-17 21:08:38 344人浏览 八月长安
摘要

Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。 并且,大家可以制定自己的排序规则。 按单个value排序: import java.util.Collect

Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。

并且,大家可以制定自己的排序规则。
按单个value排序:

import java.util.Collections;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map; import static java.util.Map.Entry.comparingByValue;import static java.util.stream.Collectors.toMap; public class SortTest {     public static void main(String[] args) throws Exception {         // 创建一个字符串为Key,数字为值的map        Map budget = new HashMap<>();        budget.put("clothes", 120);        budget.put("grocery", 150);        budget.put("transportation", 100);        budget.put("utility", 130);        budget.put("rent", 1150);        budget.put("miscellneous", 90);        System.out.println("排序前: " + budget);         // 按值排序 升序        Map sorted = budget                .entrySet()                .stream()                .sorted(comparingByValue())                .collect(                        toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,    LinkedHashMap::new));         System.out.println("升序按值排序后的map: " + sorted);         // 按值排序降序        sorted = budget                .entrySet()                .stream()                .sorted(Collections.reverseOrder(comparingByValue()))                .collect(                        toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,    LinkedHashMap::new));         System.out.println("降序按值排序后的map: " + sorted);    }  }

按多个value排序:

data = data.stream().sorted(Comparator.comparing(o -> {    StringBuffer key = new StringBuffer();    fieldList.stream().forEach((a)-> {        key.append(o.get(a)+"");    });    return key.toString();} )).collect(Collectors.toList());

下面的代码中,首先按照value的数值从大到小进行排序,当value数值大小相同时,再按照key的长度从长到短进行排序,这个操作与Stream流式操作相结合。

        public static LinkedHashMap sortMap(Map map) {        return map.entrySet().stream().sorted(((item1, item2) -> {            int compare = item2.getValue().compareTo(item1.getValue());            if (compare == 0) {                if (item1.geTKEy().length() < item2.getKey().length()) {                    compare = 1;                } else if (item1.getKey().length() > item2.getKey().length()) {                    compare = -1;                }            }            return compare;        })).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));    }

来源地址:https://blog.csdn.net/weixin_44688973/article/details/128612150

--结束END--

本文标题: Map按单个或多个Value排序,当Value相同时按Key排序

本文链接: https://lsjlt.com/news/373338.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作