文档章节

Map在java8中排序

RyanMiao
 RyanMiao
发布于 2016/11/24 22:59
字数 243
阅读 331
收藏 0

##HashMap不是有序的 java1.8重新修改了HashMap,结构变为数组+链表+红黑树(链表>8).因此,顺序取决于hash。

@Test
public void testHashMapShouldBeOrderedButNotAlpha(){
    Map<String, Integer> unsortMap = new HashMap<>();
    unsortMap.put("z", 10);
    unsortMap.put("a", 6);
    unsortMap.put("d", 1);
    unsortMap.put("e", 7);
    unsortMap.put("b", 5);
    unsortMap.put("f", 8);
    unsortMap.put("n", 99);
    unsortMap.put("j", 50);
    unsortMap.put("c", 20);
    unsortMap.put("m", 2);
    unsortMap.put("f", 9);

    Assert.assertEquals("{a=6, b=5, c=20, d=1, e=7, f=9, z=10, j=50, m=2, n=99}",
            unsortMap.toString());
}

##使用stream排序收集为LinkedHashMap 因此,如果想要有序的map则必须转换成LinkedHashMap

@Test
public void testHashMapSortByValueDesc(){
    Map<String, Integer> unsortMap = new HashMap<>();
    unsortMap.put("z", 10);
    unsortMap.put("b", 5);
    unsortMap.put("a", 6);
    unsortMap.put("c", 20);
    unsortMap.put("d", 1);
    unsortMap.put("e", 7);
    unsortMap.put("y", 8);
    unsortMap.put("n", 99);
    unsortMap.put("j", 50);
    unsortMap.put("m", 2);
    unsortMap.put("f", 9);

    LinkedHashMap<String, Integer> orderMap = unsortMap.entrySet().stream()
            .sorted(Map.Entry.comparingByValue(Collections.reverseOrder()))
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    (e1, e2) -> e1,
                    LinkedHashMap::new
            ));
    Assert.assertEquals("{n=99, j=50, c=20, z=10, f=9, y=8, e=7, a=6, b=5, m=2, d=1}",
            orderMap.toString());
    }

###参考

© 著作权归作者所有

共有 人打赏支持
RyanMiao
粉丝 10
博文 13
码字总数 16643
作品 0
深圳
程序员
私信 提问
Java8中对HashMap的Value值进行排序

Java8中对HashMap的Value值进行排序 一号门-程序员的工作,程序员的生活(java,python,delphi实战)2017-10-08247 阅读 Java 在Java8中对java.util.Comparator 和 Map.Entry 增加了新的方法用来...

一号门-程序员的工作,程序员的生活(java,python,delphi实战)
2017/10/08
0
0
java8的重要特性及其他,昨天答应的发java8╭(╯ε╰)╮

【注意】本文节选自是 DZone 指南 Java 生态系统的专题文章,作者Trisha Gee是Java资深工程师和布道者。在本文中,Trisha Gee阐述了Java 8的重要特性以及使用的原因,由OneAPM工程师翻译。 ...

默默学习中
2016/03/28
1K
9
java8新特性介绍

一:接口的默认方法 Java8允许开发者通过使用关键字default向接口中加入非抽象方法。这一特性被称为扩展方法。

yjpfj1203
2016/12/15
17
0
为什么选择 Java 8 ?

本文是 DZone 指南 Java 生态系统的专题文章。点击链接可阅读更多见解深刻的文章、行业统计信息,系 OneAPM工程师编译整理。 在很多情况下,Java8 都能提升应用性能,而无需任何改变或性能调...

OneAPM蓝海讯通
2015/11/04
117
0
java8-lambda实战

前言 java8推出已经很久了,然而其新特性却几乎没有怎么用过。原因是既然已有的只是满足需求何必去学习新的?然而,随着敲代码越来越多,业务上有很多臃肿繁琐的判断校验之类的代码,使得代码...

RyanMiao
2016/11/20
29
0

没有更多内容

加载失败,请刷新页面

加载更多

a标签点击浏览器下载图片,不打开

网上好多给a标签加download属性的,但都不好使。 <!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Auth......

S三少S
17分钟前
26
0
搭建私有maven仓库并在项目中使用

这是一篇写给女朋友看的教程...前方高能,注意避让~ 1.私有maven仓库的搭建 搭建环境为阿里云ESC服务器,CentOS.确保服务器已经安装Jdk。然后我要手把手教你安装和启动nexus。 Step1:新建一个...

liululee
20分钟前
1
0
js 写文件

//写文件function doSave(value, type, name) {    var blob;    if (typeof window.Blob == "function") {        blob = new Blob([value], {type: type});    }......

重城重楼
29分钟前
2
0
Ubuntu and Apache 搭建 Let's Encrypt SSL Https

本文参考来着来自https://www.howtoing.com/install-free-lets-encrypt-ssl-certificate-for-apache-on-debian-and-ubuntu 感谢作者的分享 本事例环境介绍 ubuntu (Version 16.04.1 LTS) ubu......

罗培海
32分钟前
22
0
如何优雅的使用RabbitMQ

目录 RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种: 1、系统集成,分布式系统的...

编程SHA
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部