开心一笑
【记者去采访一山区百岁老农: “老人家,你是吃什么东西才能保持长寿的啊?”
百岁老农: “我们这只能种玉米,平时也是以玉米为主食。”
记者: “那你现在最大的愿望是什么呢”。
百岁老农: “我最想死。”
记者: “啊!为什么?”
百岁老农:“吃了一百年的玉米,你不想死啊?”】
提出问题
项目常用类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)
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!