优雅永不过时

无论是日常编码,还是业务涉及,能够优雅的表达思想,提高代码简洁度,阅读性都是一种能力,总结一下优雅的做法

优雅的关闭流
java7 try with resource,针对实现了AutoCloseable接口的类,都可优雅的关闭流,从而舍弃finally关闭

try catch finally

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BufferedReader in = null;
try {
....
} catch (Exception e) {

e.printStackTrace();
}finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
try winth resource
1
2
3
4
5
6
7
try (final BufferedReader in = new BufferedReader(new InputStreamReader((new URL(url + "?" + param)).openConnection().getInputStream()));PrintWriter out =new PrintWriter(response.getWriter())){

...
}catch{


}

Netty 优雅的关闭流程
1
shutdownGracefully()
Lambda表达式
list求交集

1
List collect = list1.stream().filter(list2::contains).collect(Collectors.toList());
设计模式代替if else,策略模式,模板模式
代码整洁度,例如多注入service,按着高矮胖瘦排列,视觉舒适,controller求求你别写业务代码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public  List getRandomList(List<?> paramList,int count){
if(count==0){
return null;
}
Random random=new Random();
List<Integer> tempList=new ArrayList<>();//临时存放产生的list索引,去除重复的索引
List newList=new ArrayList();//生成新的list集合
int temp=0;
if(count<=1){//如果数据小于1,取一条数据
temp = random.nextInt(paramList.size());
newList.add(paramList.get(temp));
}else {
for(int i=0;i<Math.ceil(count);i++){
temp=random.nextInt(paramList.size());//初始化一个随机数,将产生的随机数作为被抽list的索引
if(!tempList.contains(temp)){//判断随机抽取的随机数
tempList.add(temp);
newList.add(paramList.get(temp));
}
else{
i--;
}
}
}
return newList;
}

优雅判空
个人喜欢Assert判空,至于java8的Optional并没体会到优雅之处,日常StringUtils,Collections,isNoBlank等,

1
2
3
4
5
6
7
8
public String testOptional(Test test) {
return Optional.ofNullable(test).flatMap(Test::getTest3)
.flatMap(Test3::getTest2)
.map(Test2::getInfo)
.orElse("");
}
看起来挺优雅,但日常没体会到
还有日常常用的instanceof
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
else if (f instanceof TreeBin) {
validated = true;
TreeBin<K,V> t = (TreeBin<K,V>)f;
TreeNode<K,V> r, p;
if ((r = t.root) != null &&
(p = r.findTreeNode(hash, key, null)) != null) {
V pv = p.val;
if (cv == null || cv == pv ||
(pv != null && cv.equals(pv))) {
oldVal = pv;
if (value != null)
p.val = value;
else if (t.removeTreeNode(p))
setTabAt(tab, i, untreeify(t.first));
}
}
}
{% if post.top %} 置顶 | {% endif %}