文档章节

实现Map按值排序

游人未归
 游人未归
发布于 07/12 23:53
字数 279
阅读 24
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

Map按照值排序,需要自定义比较器,实现Comparator接口,实现compare方法。

public class SortByVlue {
	public static void main(String[] args) {
		Map<String, Long> map = new HashMap<String, Long>();
		map.put("e", null);
		map.put("a", 4L);
		map.put("b", 2L);
		map.put("d", 3L);
		map.put("c", 1L);
		map.put("f", null);
		// 默认会根据键排序
		for (Entry<String, Long> entry : map.entrySet()) {
			System.out.println(entry.getKey() + ": " + entry.getValue());
		}
		System.out.println("....................");
		Map<String, Long> result = sortMapByValue(map);
		System.out.println("Map排序前:");
		for (Entry<String, Long> entry : result.entrySet()) {
			System.out.println(entry.getKey() + ": " + entry.getValue());
		}
	}

	public static Map<String, Long> sortMapByValue(Map<String, Long> map) {
		int count = 0;
		// 存放结果
		Map<String, Long> sortMap = new LinkedHashMap<String, Long>();
		// 封装,对list排序
		List<Entry<String, Long>> list = new ArrayList<Map.Entry<String, Long>>();
		// 在排序前计算value为null的个数
		for (Entry<String, Long> entry : map.entrySet()) {
			if (entry.getValue() != null) {
				list.add(entry);
			} else {
				count++;
			}
		}
		System.out.println("value=null的个数:" + count);
		Collections.sort(list, new ValueComparator());
		//使用迭代器进行遍历
		Iterator<Entry<String, Long>> iterator = list.iterator();
		while (iterator.hasNext()) {
			Entry<String, Long> next = iterator.next();
			sortMap.put(next.getKey(), next.getValue());
		}

		return sortMap;
	}
}
class ValueComparator implements Comparator<Entry<String, Long>> {

	@Override
	public int compare(Entry<String, Long> o1, Entry<String, Long> o2) {
		// 值比较器
		return o1.getValue().compareTo(o2.getValue());
	}
}

游人未归
粉丝 4
博文 32
码字总数 30779
作品 0
西青
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
3.9K
3
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.8K
18
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

好用到爆的 Java 技巧

本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有意义的事情...

码农突围
43分钟前
8
0
消息队列(MessageQueue)-分析

这里分析消息队列的原理和一般做法和其理念价值 这里还会 分析 NATS 和其可改进点 TODO

梦想游戏人
47分钟前
20
0
Redis 教程

Redis 教程 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。 Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的...

rootliu
50分钟前
9
0
SPSSAU 付费数据研究报告服务

SPSSAU-付费数据分析报告服务(周老师提供) 本文分享自微信公众号 - SPSSAU(spssau)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起...

SPSSAU
2017/11/08
0
0
芋艿-springcloud gateway

http://www.iocoder.cn/Spring-Cloud/Spring-Cloud-Gateway/?github springcloud gateway 官方文档 https://cloud.spring.io/spring-cloud-gateway/reference/html/#gatewayfilter-factories......

Java搬砖工程师
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部