美文网首页互联网科技程序员今日看点
Java之项目用到类Objects,TreeMap排序简单分享

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

作者: 阿_毅 | 来源:发表于2017-01-20 21:42 被阅读189次

    开心一笑

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

    唯美图片

    提出问题

    项目常用类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)

    唯美图片

    其他

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

    相关文章

      网友评论

        本文标题:Java之项目用到类Objects,TreeMap排序简单分享

        本文链接:https://www.haomeiwen.com/subject/zwrgbttx.html