同事老王記憶中還存的是JDK7的代碼?是時候幫他更新幾個細節實現了~

隨着2019年9月17日Java13正式發佈,不少夥伴們都震驚了,手裏用的仍是個位數版本的,官方咋都幹到13了,不過也沒必要太着急,畢竟最近的兩個長期支持版本是8和11,手持Java8的夥伴表示還能再戰三年!java

可是身邊的程序員老王雖然手持Java8,寫的仍是7的代碼,記憶中幾個經典的業務場景代碼,已經烙印在腦海裏了,其實你們早就不這麼寫了喂,讓咱們舉幾個例子:程序員

  1. 老王記憶中的集合轉爲逗號拼接的字符串,是這樣的
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < bizList.size(); i++) {
    strBuilder.append(bizList.get(i));
    if (i != bizList.size() - 1) {
        strBuilder.append(",");
    }
}
System.out.println(strBuilder.toString());
// v,t,1,2,3,4
複製代碼

其實如今都是這樣的sql

StringJoiner sj = new StringJoiner(",");
bizList.forEach(sj::add);
System.out.println(sj.toString());
// v,t,1,2,3,4
複製代碼

或者這樣的數組

String result = bizList.stream().collect(Collectors.joining(","));
System.out.println(result);
// v,t,1,2,3,4
複製代碼

甚至直接這樣的bash

String result = String.join(",", bizList);
System.out.println(result);
// v,t,1,2,3,4
複製代碼
  1. 老王記憶中的顯示建立一個線程,是這樣的
new Thread() {
	@Override
	public void run() {
		System.out.println("New Thread");
	}
}.start();
複製代碼

其實如今都是這樣的:app

Runnable task = () -> System.out.println("New Thread");
new Thread(task).start();
複製代碼

或者這樣的:ide

public static void main(String[] args) {
	new Thread(new CommonTest()::task).start();
}

public void task() {
	System.out.println("New Thread");
}
複製代碼
  1. 老王記憶中的使用Map統計數組元素出現次數,是這樣的
int[] intArr = {1, 5, 9, 6, 4, 5, 1, 5, 6, 9, 10, 1, 5};
Map<Integer, Integer> bizMap = new HashMap<>();
for (int i = 0; i < intArr.length; i++) {
	int item = intArr[i];
	// contains key : + 1
	if (bizMap.containsKey(item)) {
		bizMap.put(item, bizMap.get(item) + 1);
	} else { // default 1
		bizMap.put(item, 1);
	}
}
for (Map.Entry<Integer, Integer> bizMapEntry : bizMap.entrySet()) {
	System.out.print("[" + bizMapEntry.getKey() + " => " + bizMapEntry.getValue() + "]");
}
//[1 => 3][4 => 1][5 => 4][6 => 2][9 => 2][10 => 1]
複製代碼

其實如今都是這樣的:ui

public static void main(String[] args) {
	int[] intArr = {1, 5, 9, 6, 4, 5, 1, 5, 6, 9, 10, 1, 5};
	Map<Integer, Integer> bizMap = new HashMap<>();
	for (int i = 0; i < intArr.length; i++) {
		bizMap.compute(intArr[i], CommonTest::count);
	}
	bizMap.forEach((k, v) -> System.out.print("[" + k + " => " + v + "]"));
        //[1 => 3][4 => 1][5 => 4][6 => 2][9 => 2][10 => 1]
}

public static Integer count(Integer key, Integer val) {
	return val == null ? 1 : val + 1;
}
複製代碼

甚至是這樣的:spa

int[] intArr = {1, 5, 9, 6, 4, 5, 1, 5, 6, 9, 10, 1, 5};
// vt tips : 別忘了裝箱boxed() 一下
Map<Integer, Integer> bizMap = Arrays.stream(intArr).boxed()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(i -> 1)));
bizMap.forEach((k, v) -> System.out.print("[" + k + " => " + v + "]"));
//[1 => 3][4 => 1][5 => 4][6 => 2][9 => 2][10 => 1]
複製代碼
  1. 老王記憶中的對於嵌套對象的判空,是這樣的
if (objA != null) {
	ObjB objB = objA.getObjB();
	if (objB != null) {
		ObjC objC = objB.getObjC();
		if (objC != null) {
			return objC.getResult() == null ? "" : objC.getResult();
		}
	}
}
複製代碼

其實如今都是這樣的:線程

String result = Optional.ofNullable(objA).map(ObjA::getObjB).map(ObjB::getObjC)
                .map(ObjC::getResult).orElse(EMPTY);
return result;
複製代碼
  1. 老王記憶中的獲取明天的日期,是這樣的
Thread.sleep(24 * 60 * 60 * 1000);
Date result = new Date();
複製代碼

不是這段,老王記憶中是這樣的:

Date currDate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(currDate);
cal.add(Calendar.DATE, 1);
Date result = cal.getTime();
複製代碼

可是如今已經能夠這樣:

LocalDate result = LocalDate.now().plusDays(1);
java.util.Date utilsPackageDate = java.sql.Date.valueOf(result);
複製代碼

暫時先舉這幾個經常使用的例子,下面咱們能夠討論一下,老王這樣寫代碼,有錯嗎? 我認爲並無錯,運行穩定,代碼規範,就是好代碼,就算你寫出花了,別人看不懂,難以維護也是不可取的。

不過做爲一名合格的程序員,時常更新一下技術儲備,寫下代碼以前,思考一下要寫的代碼的「Best Practice」是怎樣的,也是一門必修課程呀。


走過路過別錯過~ 點個贊再走吧~

相關文章
相關標籤/搜索