Java之項目用到類Objects只祠,TreeMap排序簡單分享

開心一笑

【記者去采訪一山區(qū)百歲老農(nóng): “老人家瞎嬉,你是吃什么東西才能保持長壽的啊?”
百歲老農(nóng): “我們這只能種玉米蝎毡,平時也是以玉米為主食⊙踉妫”
記者: “那你現(xiàn)在最大的愿望是什么呢”沐兵。
百歲老農(nóng): “我最想死”慵啵”
記者: “啊!為什么?”
百歲老農(nóng):“吃了一百年的玉米扎谎,你不想死啊?”】

唯美圖片

提出問題

項目常用類Objects,TreeMap分享???

解決問題

1.Objects介紹

Java.Util.Objects是Java 1.7引入的類烧董,提供了針對對象的一些常用方法毁靶,總共提供了12個方法〗庠澹可以自己查看JDK幫助文檔老充,項目中,我用到的一個常用方法就是isNull/nonNull螟左。

2.isNull/nonNull具體實例

在工作中我經(jīng)常會用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) 更加標(biāo)準(zhǔn)和正規(guī)。

我們看看Objects對象判空的源碼

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

4.SortedMap和TreeMap簡單介紹

SortedMap保證按照鍵的升序排列的映射巷嚣,可以按照鍵的自然順序(參見 Comparable 接口)進(jìn)行排序喘先,或者通過創(chuàng)建有序映射時提供的比較器進(jìn)行排序。

SortedMap是一個接口廷粒,TreeMap是其具體實現(xiàn)窘拯。

理論一大堆,自己上百度搜坝茎。

5.SortedMap和TreeMap默認(rèn)升序排序?qū)嵗?/strong>

TreeMap默認(rèn)按照升序排序

例1:

@Test
public void test() throws Exception{
    //TreeMap默認(rèn)按照升序排序
    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));
    }
}

打印結(jié)果:

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

例2:

@Test
public void test(){
    //TreeMap默認(rèn)按照升序排序
    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));
    }
}

打印結(jié)果:

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

5.SortedMap和TreeMap降序排序?qū)嵗?/strong>

TreeMap默認(rèn)是升序的涤姊,如果我們需要改變排序方式,則需要使用比較器:Comparator嗤放。Comparator可以對集合對象或者數(shù)組進(jìn)行排序的比較器接口思喊,實現(xiàn)該接口的public compare(T o1,To2)方法即可實現(xiàn)排序,如下:

@Test
public void test(){
    //TreeMap默認(rèn)按照升序排序
    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字段進(jìn)行排序

這個需求是我在項目中碰到的問題次酌,業(yè)務(wù)場景如下:

想要通過獲取Map集合中Value值最大恨课,所對應(yīng)的Key的值。

網(wǎng)上搜索下岳服,本來想搜索相關(guān)的開源工具類剂公,結(jié)果沒找到。不過已經(jīng)有高手寫了些工具類吊宋,具體如下:

這里我只貼出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();
    //利用函數(shù)式進(jìn)行排序
    st.sorted(Comparator.comparing(e -> e.getValue())).forEach(e -> result.put(e.getKey(), e.getValue()));

    return result;
}

讀書感悟

來自劉瑜《觀念的水位》

  • 被夢想俘虜?shù)娜耍褪窃谧分鹱约旱亩蜻\(yùn)璃搜。
  • 在這個世界上構(gòu)成沖突的未必僅僅是"善惡"之間文兑,一種"善"和另一種"善"也可能構(gòu)成緊張關(guān)系。
  • 人生就像一盒口香糖腺劣,無論是什么風(fēng)味的绿贞,嚼著嚼著都沒有了味道。
  • 樂觀很大程度上來自于對人性的信心橘原。
  • 愛情的偉大之處在于它可以遮蔽一個人存在的虛空籍铁,愛情的渺小之處在于它只能遮蔽這個虛空而已。對于解決自我的渺小感趾断,愛情只是偽幣拒名。
  • 海德格爾說:向死而生。只有死亡的鼻尖才能讓我們感受到生的緊迫芋酌。一旦死亡的陰影稍稍放下他的爪子增显,我們立刻恢復(fù)自己的敗家子本性。驕縱脐帝,懶惰同云,懦弱糖权,縮在自我的臨時棚戶里得過且過,偶爾避想窗外遠(yuǎn)處的地平線上炸站,有一個自我在勇敢奔跑星澳,腳下的道路充滿危險并因危險而瑰麗。

經(jīng)典故事

釘子:有一個男孩有著很壞的脾氣旱易,于是他的父親就給了他一袋釘子禁偎;并且告訴他,每當(dāng)他發(fā)脾氣的時候就釘一根釘子在后院的圍籬上阀坏。第一天如暖,這個男孩釘下了37 根釘子。慢慢地每天釘下的數(shù)量減少了忌堂。他發(fā)現(xiàn)控制自己的脾氣要比釘下那些釘子來得容易些装处。終于有一天這個男孩再也不會失去耐性亂發(fā)脾氣,他告訴他的父親這件事浸船,父親告訴他,現(xiàn)在開始每當(dāng)他能控制自己的脾氣的時候寝蹈,就拔出一根釘子李命。一天天地過去了,最后男孩告訴他的父親箫老,他終于把所有釘子都拔出來了封字。父親握著他的手來到后院說:你做得很好,我的好孩子耍鬓。但是看看那些圍籬上的洞阔籽,這些圍籬將永遠(yuǎn)不能回復(fù)成從前。你生氣的時候說的話將像這些釘子一樣留下疤痕牲蜀。如果你拿刀子捅別人一刀笆制,不管你說了多少次對不起,那個傷口將永遠(yuǎn)存在涣达。話語的傷痛就像真實的傷痛一樣令人無法承受在辆。】

大神文章

【1】7.10.2 Java 7 新增的Objects 類
【2】java.util.Objects工具類示例
【3】JDK 7:java.util.Objects中應(yīng)該包含哪些常用方法呢度苔?
【4】[瘋狂Java]基礎(chǔ)類庫:Object匆篓、深拷貝、Objects工具類
【5】對Java的Map的Value字段進(jìn)行排序
【6】Sort a Map<Key, Value> by values (Java)

唯美圖片

其他

如果有帶給你一絲絲小快樂寇窑,就讓快樂繼續(xù)傳遞下去鸦概,歡迎點贊、頂甩骏、歡迎留下寶貴的意見窗市、多謝支持先慷!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谨设,隨后出現(xiàn)的幾起案子熟掂,更是在濱河造成了極大的恐慌,老刑警劉巖扎拣,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赴肚,死亡現(xiàn)場離奇詭異,居然都是意外死亡二蓝,警方通過查閱死者的電腦和手機(jī)誉券,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刊愚,“玉大人踊跟,你說我怎么就攤上這事∨阜蹋” “怎么了商玫?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牡借。 經(jīng)常有香客問我拳昌,道長,這世上最難降的妖魔是什么钠龙? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任炬藤,我火速辦了婚禮,結(jié)果婚禮上碴里,老公的妹妹穿的比我還像新娘沈矿。我一直安慰自己,他們只是感情好咬腋,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布羹膳。 她就那樣靜靜地躺著,像睡著了一般根竿。 火紅的嫁衣襯著肌膚如雪溜徙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天犀填,我揣著相機(jī)與錄音蠢壹,去河邊找鬼。 笑死九巡,一個胖子當(dāng)著我的面吹牛图贸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疏日,長吁一口氣:“原來是場噩夢啊……” “哼偿洁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起沟优,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涕滋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挠阁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宾肺,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年侵俗,在試婚紗的時候發(fā)現(xiàn)自己被綠了锨用。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡隘谣,死狀恐怖增拥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寻歧,我是刑警寧澤掌栅,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站码泛,受9級特大地震影響猾封,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弟晚,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逾苫。 院中可真熱鬧卿城,春花似錦、人聲如沸铅搓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽星掰。三九已至多望,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氢烘,已是汗流浹背怀偷。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留播玖,地道東北人椎工。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親维蒙。 傳聞我的和親對象是個殘疾皇子掰吕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司颅痊,掛了不少殖熟,但最終還是拿到小米、百度斑响、阿里菱属、京東、新浪恋捆、CVTE照皆、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,253評論 11 349
  • 一膜毁、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,265評論 0 16
  • 面向?qū)ο笾饕槍γ嫦蜻^程。 面向過程的基本單元是函數(shù)愤钾。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,057評論 0 4
  • 集合是java中存放對象的容器瘟滨,存放于java.util包中。下圖是java集合類的繼承與實現(xiàn)關(guān)系: Collec...
    守住陽光閱讀 8,749評論 1 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理能颁,服務(wù)發(fā)現(xiàn)杂瘸,斷路器,智...
    卡卡羅2017閱讀 134,659評論 18 139