開心一笑
【記者去采訪一山區(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ù)傳遞下去鸦概,歡迎點贊、頂甩骏、歡迎留下寶貴的意見窗市、多謝支持先慷!