对java的map的value字段进行排序-尊龙官方平台

对java的map的value字段进行排序

el/2024/3/25 18:22:15

  构造treemap可以指定comparator,但是不能对value字段进行排序。如果有需求对value字段排序,例如map存放的是单词,单词出现次数,怎么按单词次数排序呢?

  可以先将map中的key-value放入list,然后用collections.sort对list排序,再将排序后的list放入linkedhashmap,最后返回linkedhashmap就可以了。linkedhashmap可是个宝贝,可以通过构造方法制定是按放入的顺序,还是get顺序 排序。linkedhashmap,稍微修改,可以很容易的实现lru算法(最近最少使用)。具体的treemap 红黑树实现和linkedhashmap实现还仔细看。

  废话不多说,上代码:

public class maputil {public static > map sortbyvalue(map map) {list> list = new linkedlist>(map.entryset());collections.sort(list, new comparator>() {public int compare(map.entry o1, map.entry o2) {return (o1.getvalue()).compareto(o2.getvalue());}});map result = new linkedhashmap();for (map.entry entry : list) {result.put(entry.getkey(), entry.getvalue());}return result;}
}

 java 7 version

public static > map sortbyvalue(map map) {list> list = new linkedlist<>(map.entryset());collections.sort(list, new comparator>() {@overridepublic int compare(map.entry o1, map.entry o2) {return (o1.getvalue()).compareto(o2.getvalue());}});map result = new linkedhashmap<>();for (map.entry entry : list) {result.put(entry.getkey(), entry.getvalue());}return result;}

 java 8 version

public static > map sortbyvalue(map map) {map result = new linkedhashmap<>();stream> st = map.entryset().stream();st.sorted(comparator.comparing(e -> e.getvalue())).foreach(e -> result.put(e.getkey(), e.getvalue()));return result;}

java 8 版本的代码好短啊 ~

以后做个工具包,像这样的排序直接用工具包使用就可以了。

参考资料:http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java  

转自:对java的map的value字段进行排序


http://www.ngui.cc/el/5127502.html

相关文章

什么是fbclid?新的facebook参数?

继“主机nginx的错误日志分析整理”,由于在站点页面中安装了百度统计,所以可以跟踪访问来源,今天查看发现有一大部分来自于http://www.facebook.com,而具体的外部链接是下面这样的: 有网友提到: 我一直在w…

如何为自己的 csdn博客设置自定义域名?

想实现自定义域名,有几种途径,这里简单介绍一下。 1、csdn官方提供的功能 为了更好的服务于用户,csdn博客推出了自定义域名服务。 如何操作 在“博客配置”中可以进行个性域名配置,设置条件如下: 5-18个字符&…

vnc timed out waiting for a response from the computer

最近在阿里云服务器ecs上安装了图形界面和vnc server,参考:centos6.5下安装远程桌面服务端软件vnc server 但是连接的时候却提示:vnc timed out waiting for a response from the computer 很是奇怪; 因为印象中阿里云服务器ecs要求关闭 security linux,所以没有考虑ce…

vnc server bad display name [xxx]:1 in add command

bad display name "[ip address]:1" in "add" command bad display name "[这里也可能是计算机名称,云服务器的实例名]:1" in "add" command 解决方法如下: (1)vi /etc/hosts &#…

在阿里云服务器ecs centos 6.8上安装图形界面和远程桌面 vnc server

安装图形界面,一句命令搞定: yum -y groupinstall "x window system" "chinese support" "desktop" 启动图形界面: startx 但是在ssh远程连接状态下应该是不会成功的; 设置开机以图形界面启动 …

centos 6.8 上安装firefox浏览器

1. 安装remi源 rpm -uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm (注意:尊龙官方平台官网上源可能会有跟新变化,导致说找不到对应rpm文件,可以先在浏览器上进入http://download.fedoraproject.org/…

如何centos 6.8上安装chrome 谷歌浏览器

如何centos6.8上安装chrome 谷歌浏览器 尝试了一些方法,都是缺少依赖,安装不了。 还有的是链接地址失效了。 yum -y install google-chrome-stable --nogpgcheck 例如:centos7 yum安装chrome浏览器 中提到的使用 yum 安装 而查找缺少的依赖,如:libgdk-3.so.0()(64b…

springboot druid配置datasource启动初始化数据库连接

1、问题场景: 1.1、服务在启动之后的第一笔或者几笔请求,处理时间较长,对于调用方来说超时,引发技术保底。 1.2、数据库连接信息配置错误,项目启动过程中却不产生任何异常,等到实际功能用到数据库了才抛出异常。 2、问题分析: 2.1、调用发系统通过http请求调用服务,设…

帝国cms empirecms 设置https后网页排版乱了飞了的解决方法

帝国cms empirecms 今天设置了https后网页排版都乱了飞了, 查询得知 帝国cms empirecms 从 7.5版本后开始支持 https 自动识别, 但为什么会飞了呢,因为之前生成的页面是http的, 所以,解决方法就是:把所有…

json 转日期出错,jsonarray.tocollection 时间总是转化为当前时间

最近用到了json字符串转实体类,转集合的功能, 主要代码如下: /*** json 字符串转集合* * @author lipw* @date 2017年5月10日下午6:08:17* @param jsonstring* @param pojocalss* 集合中的类* @return*/public static list jsontolist(strin…
网站地图