1. 程式人生 > >都2020年了,你還不會寫簡潔的Java程式碼!

都2020年了,你還不會寫簡潔的Java程式碼!

# 都2020年了,你還不會寫簡潔的Java程式碼! ## 使用Google Guava依賴 ```xml com.google.guava guava 29.0-jre ``` ## 建立一個list集合並賦值 最原始的辦法: ```java List stringList = new ArrayList<>(); stringList.add("jack"); stringList.add("pony"); stringList.add("ekko"); ``` 簡單改造: ```java List stringList2 = new ArrayList(4) {{ add("jack"); add("pony"); add("ekko"); }}; ``` 終極改造: ```java List stringList3 = ImmutableList.of("jack", "pony", "ekko"); ``` ## 去除list中的空值 一般做法: ```java List nameList = new ArrayList<>(); List noNullList = new ArrayList<>(); nameList.add("jack"); nameList.add("pony"); nameList.add("ekko"); nameList.add(null); for (String o : stringList) { if (o != null) { noNullList.add(o); } } ``` 使用`lamda`簡化後的寫法: ```java List noNullListFun = nameList .stream() .filter(Objects::nonNull) .collect(Collectors.toList()); ``` ## list中的值求和 原始做法: ```java List numList = new ArrayList(10) {{ add(BigDecimal.valueOf(111L)); add(BigDecimal.valueOf(8888.22)); add(BigDecimal.valueOf(333.22)); add(BigDecimal.valueOf(857857.22)); add(BigDecimal.valueOf(5331.22)); }}; BigDecimal total = BigDecimal.ZERO; for (BigDecimal num : numList) { total = total.add(num); } System.out.println(total); ``` 簡化一下: ```java List numListSimple = ImmutableList.of(BigDecimal.valueOf(111L) , BigDecimal.valueOf(8888.22), BigDecimal.valueOf(333.22) , BigDecimal.valueOf(857857.22), BigDecimal.valueOf(5331.22)); // 求和 BigDecimal totalNum = BigDecimal.valueOf(numListSimple.stream().mapToDouble(BigDecimal::doubleValue).sum()); ``` ## 判斷值是否為空 原始寫法: ``` public static String getUserName() { return null; } // 模擬呼叫服務 String username = getUserName(); String res; if (username != null) { res = username; } else { res = "遊客"; } ``` 簡化: ```java String userName = Optional.ofNullable(username).orElse("遊客"); System.out.println(userName); ``` ## 從多個集合中取匹配的值 原始方法: ```java package com.github.springtools.test; import com.google.common.collect.ImmutableList; import java.util.HashSet; import java.util.List; import java.util.Set; public class TestFlatMap { public static void main(String[] args) { /* * 匹配到姓馬的並去重然後放入一個新的集合中 */ List nameListA = ImmutableList.of("素云云", "馬雲雲", "騰花花", "阿嬌嬌", "馬飛飛", "廖妹妹"); List nameListB = ImmutableList.of("素雲濤", "唐三三", "小五五", "馬中山", "馬僻靜", "馬肥羊"); List nameListC = ImmutableList.of("張三", "李四", "王二", "麻子", "上官玩兒", "馬可菠蘿"); Set nameSet = new HashSet<>(); nameListA.forEach(n -> { if (n.startsWith("馬")) { nameSet.add(n); } }); nameListB.forEach(n -> { if (n.startsWith("馬")) { nameSet.add(n); } }); nameListC.forEach(n -> { if (n.startsWith("馬")) { nameSet.add(n); } }); System.out.println(nameSet.toString()); } } ``` 改造後的程式碼: ```java import com.google.common.collect.ImmutableList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; public class TestFlatMap2 { public static void main(String[] args) { /* * 匹配到姓馬的並去重然後放入一個新的集合中 */ List nameListA = ImmutableList.of("素云云", "馬雲雲", "騰花花", "阿嬌嬌", "馬飛飛", "廖妹妹"); List nameListB = ImmutableList.of("素雲濤", "唐三三", "小五五", "馬中山", "馬僻靜", "馬肥羊"); List nameListC = ImmutableList.of("張三", "李四", "王二", "麻子", "上官玩兒", "馬可菠蘿"); Set nameSet = Stream.of(nameListA, nameListB, nameListC) .flatMap(list -> list.stream().filter(name -> name.startsWith("馬"))) .collect(Collectors.toSet()); System.out.println(nameSet.toString()); } } ``` ## 總結 Java之道,寫的程式碼第一點是要別人能看的明白,不然你離職了留下一堆像shi一樣的程式碼,接盤的人一定會問候你的親人,何必呢 二是要利用一切可以利用的工具類,不過用的時候看看別人的原始碼,寫的時候考慮的周全與否,這樣基本你的程式碼顯性來看會少很多 總之,功能一點點實現,大道至簡,用最簡單的程式碼實現最強的邏輯~