最全使用Java8 Stream API对Map按键或值进行排序,springcloud架构原理

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

codes.put(“France”, 33);

codes.put(“China”, 86);

codes.put(“Pakistan”, 92);

// 按照Map的键进行排序

Map<String, Integer> sortedMap = codes.entrySet().stream()

    .sorted(Map.Entry.comparingByKey())

    .collect(

            Collectors.toMap(

                Map.Entry::getKey, 

                Map.Entry::getValue,

                (oldVal, newVal) -> oldVal,

                LinkedHashMap::new

            )

    );

// 将排序后的Map打印

sortedMap.entrySet().forEach(System.out::println);




看上文中第二段代码:



*   首先使用entrySet().stream() 将Map类型转换为Stream流类型。

*   然后使用sorted方法排序,排序的依据是Map.Entry.comparingByKey(),也就是按照Map的键排序

*   最后用collect方法将Stream流转成LinkedHashMap。 其他参数都好说,重点看第三个参数,就是一个merge规则的lambda表达式,与merge方法的第三个参数的用法一致。由于本例中没有重复的key,所以新值旧值随便返回一个即可。



上面的程序将在控制台上打印以下内容,键(国家/地区名称)以自然字母顺序排序:



China=86

France=33

Germany=49

Pakistan=92

United States=1




> **请注意**使用`LinkedHashMap`来存储排序的结果以保持顺序。默认情况下,`Collectors.toMap()`返回`HashMap`。`HashMap`不能保证元素的顺序。



如果希望按照键进行逆向排序,加入下图中红色部分代码即可。  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191102125323560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hhbnhpYW90b25ndG9uZw==,size_16,color_FFFFFF,t_70)



[]( )四、按Map的值排序

-------------------------------------------------------------------



当然,您也可以使用Stream API按其值对Map进行排序:



Map<String, Integer> sortedMap2 = codes.entrySet().stream()

    .sorted(Map.Entry.comparingByValue())

    .collect(Collectors.toMap(

            Map.Entry::getKey,

            Map.Entry::getValue,

            (oldVal, newVal) -> oldVal,

            LinkedHashMap::new));

sortedMap2.entrySet().forEach(System.out::println);




这是显示Map按值排序的输出:



United States=1

France=33

Germany=49

China=86

Pakistan=92




[]( )五、使用TreeMap按键排序

------------------------------------------------------------------------



大家可能都知道TreeMap内的元素是有顺序的,所以利用TreeMap排序也是可取的一种方法。您需要做的就是创建一个`TreeMap`对象,并将数据从`HashMap`put到`TreeMap`中,非常简单:



// 将 HashMap 转为 TreeMap

Map<String, Integer> sorted = new TreeMap<>(codes);




这是输出:



China=86

France=33

Germany=49

Pakistan=92

文末

我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档

  • 第一个要分享给大家的就是算法和数据结构

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第二个就是数据库的高频知识点与性能优化

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 第三个则是并发编程(72个知识点学习)

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

  • 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料

网易严选Java开发三面面经:HashMap+JVM+索引+消息队列

还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

举出来

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值