一行代码实现Map排序(JDK8+TreeMap+比较器)

导读:本篇文章讲解 一行代码实现Map排序(JDK8+TreeMap+比较器),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

前言

今天同事提了一句到list转map排序有什么技巧性的方法,他用了LinkedHashMap,而且用惯stream了,就想根据链表特性和stream的方法,先整理再顺序塞值,但是又不熟Collectors.toCollect的操作,担心不会按序生成。

期间搜的一些map排序文章还蛮无语的,
有用HashMap排的,
有用将 map 转为流,对流排序,收集并返回一个新的 LinkedHashMap的,写了一大堆。

我想,可以用TreeMap,自己写个比较。

本着能
写一行就不写两行
能用stream就不用for遍历
能用lambda就不写匿名内部类
能用方法引用就不写lambda体
的等等洁癖,直接把换了一行代码就ok

原结构

KeyObject是一个对象,要根据它的属性order排序;
ValueStrategy一个策略接口,于本文无关。

Map<KeyObject, ValueStrategy> data = new LinkedHashMap<>();

TreeMap+Lambda表达式

Map<KeyObject, ValueStrategy> data = 
new TreeMap<>((m1, m2) -> m1.getOrder() - m2.getOrder());

TreeMap+方法引用

Map<KeyObject, ValueStrategy> data = 
new TreeMap<>(Comparator.comparingInt(KeyObject::getOrder));

结语

写完这简单一句,其他使用map的地方也不用改了,这种写法,刷一段时间源码、写一段时间算法就能形成记忆,把自己觉得最好的解决方案写到代码里。我们就又聊了聊TreeMap的实现,红黑树的作用、形成、遍历、上浮下沉等,也看了一下数量庞大的源码方法群,确保了它遍历的原理正确,才进行了验证。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93713.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!