我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Map怎么实现按单个或多个Value排序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Map怎么实现按单个或多个Value排序

本篇内容主要讲解“Map怎么实现按单个或多个Value排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Map怎么实现按单个或多个Value排序”吧!

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<String, Integer> 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<String, Integer> 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<String, Integer> sortMap(Map<String, Integer> 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));    }

补充:对Map中的Value进行降序排序,当Value相同时,按照Key降序排序

package com.ethjava;import java.util.*;public class mappaixu1 {    public static void main(String[] args){         Map<Integer,Integer> hashMap=new HashMap<Integer, Integer>();        hashMap.put(1,10);        hashMap.put(5,7);        hashMap.put(2,9);        hashMap.put(3,7);        hashMap.put(3,6);//key是不可重复的,当这里再次输入Key=3时的,将会覆盖掉前面的(3,7)        hashMap.put(4,7);         //遍历        for(Map.Entry<Integer,Integer> e:hashMap.entrySet()){            System.out.println("Key: "+e.getKey()+"对应的Value: "+e.getValue());        }        //Key: 1对应的Value: 10        //Key: 2对应的Value: 9        //Key: 3对应的Value: 6        //Key: 4对应的Value: 7        //Key: 5对应的Value: 7        //这里为什么自动按照key升序排序输出???为什么        // 某梦说,这里是因为凑巧正序输出,hashMap输出相对于输入是无序的。         //下面按照Value进行倒序排列        ArrayList<Map.Entry<Integer,Integer>> arrayList=new ArrayList<Map.Entry<Integer, Integer>>(hashMap.entrySet());         Collections.sort(arrayList,new Comparator<Map.Entry<Integer,Integer>>(){            @Override             public int compare(Map.Entry<Integer,Integer> o1,Map.Entry<Integer,Integer> o2 ){                //按照Value进行倒序,若Value相同,按照Key正序排序                //方法1:return o2.getValue() - o1.getValue();                //方法2:return o2.getValue().compareTo(o1.getValue());//对于Integer,String都是可以应用的                //按照Value进行倒序,若Value相同,按照Key倒序排序                int result = o2.getValue().compareTo(o1.getValue());                //方法学习:public int compareTo( NumberSubClass referenceName )                //referenceName -- 可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数。                //返回值:如果指定的数与参数相等返回0。                // 如果指定的数小于参数返回 -1。                //如果指定的数大于参数返回 1                if(result!=0){                    return result;//即两个Value不相同,就按照Value倒序输出                }else{                    return o2.getKey().compareTo(o1.getKey());}                    //若两个Value相同,就按照Key倒序输出            }        });        //这里arrayList里的顺序已经按照自己的排序进行了调整        for(int i=0;i<arrayList.size();i++){            System.out.println(arrayList.get(i));            //方法一和方法二输出:            //1=10            //2=9            //4=7            //5=7            //3=6            //当按照Value倒序排序,但是当Value相同时,按照Key顺序正序排序             //方法二            //1=10            //2=9            //5=7            //4=7            //3=6            //当按照Value倒序输出,但是当Value相同时,按照Key倒序输出        }         for(Map.Entry<Integer,Integer> e:hashMap.entrySet()){             System.out.println(e);            //1=10            //2=9            //3=6            //4=7            //5=7            //这里表明hashMap中存取的内容顺序并没有进行任何改变,改变的是arrayList里的内容的顺序        }    }}

到此,相信大家对“Map怎么实现按单个或多个Value排序”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Map怎么实现按单个或多个Value排序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Map怎么实现按单个或多个Value排序

本篇内容主要讲解“Map怎么实现按单个或多个Value排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Map怎么实现按单个或多个Value排序”吧!Map可以先按照value进行排序,然后按照
2023-07-05

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

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

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

Map可以先按照value进行排序,然后按照key进行排序。或者先按照key进行排序,然后按照value进行排序,这样操作都行,这篇文章主要介绍了Map按单个或多个Value排序,当Value相同时按Key排序,需要的朋友可以参考下
2023-02-03

pandas怎么实现按照多列排序ascending

本篇内容主要讲解“pandas怎么实现按照多列排序ascending”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“pandas怎么实现按照多列排序ascending”吧!pandas按照多列排序
2023-06-30

sql怎么实现两个字段排序

在SQL中,可以使用ORDER BY子句对查询结果进行排序。可以指定多个字段进行排序,例如:```sqlSELECT * FROM 表名ORDER BY 字段1, 字段2;```以上语句将根据字段1进行升序排序,并在字段1相同时,根据字段2
2023-09-14

怎么用php的sort实现一个排序

在php中,sort可以用于对数值数组进行升序排序,语法为“sort(要进行排序的数组,规定如何排序数组的元素)”;如果排序成功,返回的结果是true,若失败则返回false,规定如何排序数组的元素参数默认是“1”,表示每一项按常规顺序排列。本文操作环境:Windows10系统、PHP8.1版、Dell G3电脑怎么用php的sort实现一个排序sort() 函数对数值数组进行升序排序。提示:请使用
2022-06-23

PHP中怎么实现一个排序算法

PHP中怎么实现一个排序算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
2023-06-17

java怎么实现多个下拉菜单

在Java中实现多个下拉菜单可以通过使用Swing组件中的JComboBox来实现。可以创建多个JComboBox对象来表示不同的下拉菜单,然后将它们添加到一个容器中,如JFrame或JPanel。以下是一个简单的示例代码,演示如何在Ja
java怎么实现多个下拉菜单
2024-03-13

C#中怎么实现一个DataGrid排序功能

今天就跟大家聊聊有关C#中怎么实现一个DataGrid排序功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在.Net 中C#实现DataGrid排序功能,但并不支持双向的排序。用到
2023-06-17

C#中怎么实现一个选择排序算法

C#中怎么实现一个选择排序算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。以下就是C#选择排序的实现方法:using System; namespace
2023-06-18

在Java中怎么实现一个快速排序算法

在Java中怎么实现一个快速排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序
2023-05-30

利用java怎么实现一个冒泡排序算法

利用java怎么实现一个冒泡排序算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java 算法之冒泡排序的实现代码:package cn.songxinqia
2023-05-31

利用java 怎么实现一个归并排序算法

本篇文章给大家分享的是有关利用java 怎么实现一个归并排序算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 归并排序算法,顾名思义,是一种先分再合的算法,其算法思想是将要排
2023-05-31

使用Python怎么实现一个索引排序功能

使用Python怎么实现一个索引排序功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。import requestsimport redef News_Spider():#定义
2023-06-14

使用php怎么实现一个数组排序算法

使用php怎么实现一个数组排序算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。php是什么语言php,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext
2023-06-14

怎么利用Java实现一个希尔排序算法

这期内容当中小编将会给大家带来有关怎么利用Java实现一个希尔排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java 实现希尔排序Java代码 /*希尔排序(Shell Sort)是插入排序的一种
2023-05-31

Java中怎么实现一个多线程程序

Java中怎么实现一个多线程程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java多线程程序设计详细解析一、理解Java多线程Java多线程是这样一种机制,它允许在程序中并
2023-06-17

怎么用java实现一个简单的序列化

小编给大家分享一下怎么用java实现一个简单的序列化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! package test;import Java.io.*;
2023-06-03

怎么在Java项目中实现一个堆排序算法

怎么在Java项目中实现一个堆排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。堆是数据结构中的一种重要结构,了解“堆”的概念和操作,可以帮助我们快速地掌握堆排序。堆的
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录