Java之项目用到类Objects,TreeMap排序简单分享

开心一笑

【记者去采访一山区百岁老农: “老人家,你是吃什么东西才能保持长寿的啊?”
百岁老农: “我们这只能种玉米,平时也是以玉米为主食。”
记者: “那你现在最大的愿望是什么呢”。
百岁老农: “我最想死。”
记者: “啊!为什么?”
百岁老农:“吃了一百年的玉米,你不想死啊?”】

唯美图片

提出问题

项目常用类Objects,TreeMap分享???

解决问题

1.Objects介绍

Java.Util.Objects是Java 1.7引入的类,提供了针对对象的一些常用方法,总共提供了12个方法。可以自己查看JDK帮助文档,项目中,我用到的一个常用方法就是isNull/nonNull

2.isNull/nonNull具体实例

在工作中我经常会用Objects.isNull()来判断对象是否为空。下面是一些

/**
 * @Author 阿毅
 * Created by Ay on 2016/01/05.
 */
public class Ay{

    @Test
    public void test(){
        Boy boy = null;
        Girl girl = new Girl();
        List<Boy> boyList = new ArrayList<>();
        List<Girl> girlList = null;
        String testStr = null;
        System.out.println("boy is :" + Objects.isNull(boy));//boy is :true
        System.out.println("gire is : " + Objects.isNull(girl));//gire is : false
        System.out.println("boyList is :" + Objects.isNull(boyList));//boyList is :false
        System.out.println("girlList is :" + Objects.isNull(girlList));//girlList is :true
        System.out.println("testStr is + " + Objects.isNull(testStr));//testStr is + true
        System.out.println(">>>--------------------------------------");
        System.out.println("boy is :" + Objects.nonNull(boy));//boy is :false
        System.out.println("gire is : " + Objects.nonNull(girl));//gire is : true
        System.out.println("boyList is :" + Objects.nonNull(boyList));//boyList is :true
        System.out.println("girlList is :" + Objects.nonNull(girlList));//girlList is :false
        System.out.println("testStr is + " + Objects.nonNull(testStr));//testStr is + false
    }

    class Boy{}
    class Girl{}

}

3.俩种对象判空的个人想法

对象判空if(object == null)也是可以的。

但是:

个人感觉if(Objects.isNull(object)) 比 if(object == null) 更加标准和正规。

我们看看Objects对象判空的源码

public static boolean isNull(Object obj) {
    return obj == null;
}

4.SortedMap和TreeMap简单介绍

SortedMap保证按照键的升序排列的映射,可以按照键的自然顺序(参见 Comparable 接口)进行排序,或者通过创建有序映射时提供的比较器进行排序。

SortedMap是一个接口,TreeMap是其具体实现。

理论一大堆,自己上百度搜。

5.SortedMap和TreeMap默认升序排序实例

TreeMap默认按照升序排序

例1:

@Test
public void test() throws Exception{
    //TreeMap默认按照升序排序
    SortedMap<Double, String> map = new TreeMap<>();
    map.put(2.33, "ccccc");
    map.put(2.0, "aaaaa");
    map.put(3.0, "bbbbb");
    map.put(4.0, "ddddd");
    Set<Double> keySet = map.keySet();
    Iterator<Double> iter2 = keySet.iterator();
    while (iter2.hasNext()) {
        Double key = iter2.next();
        System.out.println(key + ":" + map.get(key));
    }
}

打印结果:

2.0:aaaaa
2.33:ccccc
3.0:bbbbb
4.0:ddddd

例2:

@Test
public void test(){
    //TreeMap默认按照升序排序
    SortedMap<String, String> map = new TreeMap<>();
    map.put("b", "ccccc");
    map.put("d", "aaaaa");
    map.put("c", "bbbbb");
    map.put("a", "ddddd");
    Set<String> keySet = map.keySet();
    Iterator<String> iter = keySet.iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println(key + ":" + map.get(key));
    }
}

打印结果:

a:ddddd
b:ccccc
c:bbbbb
d:aaaaa

5.SortedMap和TreeMap降序排序实例

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:

@Test
public void test(){
    //TreeMap默认按照升序排序
    Map<String, String> map = new TreeMap<>(new Comparator<String>(){
        public int compare(String obj1, String obj2) {
            // 降序排序
            return obj2.compareTo(obj1);
            // 升序排序
            //return obj1.compareTo(obj2);
        }
     });
    map.put("b", "ccccc");
    map.put("d", "aaaaa");
    map.put("c", "bbbbb");
    map.put("a", "ddddd");
    Set<String> keySet = map.keySet();
    Iterator<String> iter = keySet.iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println(key + ":" + map.get(key));
    }
}

6.Java中Map集合对Value字段进行排序

这个需求是我在项目中碰到的问题,业务场景如下:

想要通过获取Map集合中Value值最大,所对应的Key的值。

网上搜索下,本来想搜索相关的开源工具类,结果没找到。不过已经有高手写了些工具类,具体如下:

这里我只贴出Java8的版本,代码很简洁:

 //传入一个map集合
 public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
    //新建一个LinkedHashMap对象
    Map<K, V> result = new LinkedHashMap<>();
    //获取Entry<K,V>流
    Stream<Entry<K, V>> st = map.entrySet().stream();
    //利用函数式进行排序
    st.sorted(Comparator.comparing(e -> e.getValue())).forEach(e -> result.put(e.getKey(), e.getValue()));

    return result;
}

读书感悟

来自刘瑜《观念的水位》

  • 被梦想俘虏的人,就是在追逐自己的厄运。
  • 在这个世界上构成冲突的未必仅仅是"善恶"之间,一种"善"和另一种"善"也可能构成紧张关系。
  • 人生就像一盒口香糖,无论是什么风味的,嚼着嚼着都没有了味道。
  • 乐观很大程度上来自于对人性的信心。
  • 爱情的伟大之处在于它可以遮蔽一个人存在的虚空,爱情的渺小之处在于它只能遮蔽这个虚空而已。对于解决自我的渺小感,爱情只是伪币。
  • 海德格尔说:向死而生。只有死亡的鼻尖才能让我们感受到生的紧迫。一旦死亡的阴影稍稍放下他的爪子,我们立刻恢复自己的败家子本性。骄纵,懒惰,懦弱,缩在自我的临时棚户里得过且过,偶尔避想窗外远处的地平线上,有一个自我在勇敢奔跑,脚下的道路充满危险并因危险而瑰丽。

经典故事

钉子:有一个男孩有着很坏的脾气,于是他的父亲就给了他一袋钉子;并且告诉他,每当他发脾气的时候就钉一根钉子在后院的围篱上。第一天,这个男孩钉下了37 根钉子。慢慢地每天钉下的数量减少了。他发现控制自己的脾气要比钉下那些钉子来得容易些。终于有一天这个男孩再也不会失去耐性乱发脾气,他告诉他的父亲这件事,父亲告诉他,现在开始每当他能控制自己的脾气的时候,就拔出一根钉子。一天天地过去了,最后男孩告诉他的父亲,他终于把所有钉子都拔出来了。父亲握着他的手来到后院说:你做得很好,我的好孩子。但是看看那些围篱上的洞,这些围篱将永远不能回复成从前。你生气的时候说的话将像这些钉子一样留下疤痕。如果你拿刀子捅别人一刀,不管你说了多少次对不起,那个伤口将永远存在。话语的伤痛就像真实的伤痛一样令人无法承受。】

大神文章

【1】7.10.2 Java 7 新增的Objects 类
【2】java.util.Objects工具类示例
【3】JDK 7:java.util.Objects中应该包含哪些常用方法呢?
【4】[疯狂Java]基础类库:Object、深拷贝、Objects工具类
【5】对Java的Map的Value字段进行排序
【6】Sort a Map<Key, Value> by values (Java)

唯美图片

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,137评论 11 349
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,243评论 0 16
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,036评论 0 4
  • 集合是java中存放对象的容器,存放于java.util包中。下图是java集合类的继承与实现关系: Collec...
    守住阳光阅读 8,729评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139