數組轉list,jdk提供了方法,就是有點美中不足,不可變。如果要可變,返回的list,得new下。先上代碼:
@Test public void booleanExpression() { Integer[] arr = {1,2,3,4,5}; log.info("---arr:{}",JSONObject.toJSONString(arr)); List<Integer> list = Arrays.asList(arr); try { list.add(123); log.info("---asList:{}",JSONObject.toJSONString(list)); }catch (Exception e){ log.error("--Arrays.asList出來的list直接add報錯:{}",e.getMessage()); } log.info("-------------"); List<Integer> colList = Arrays.stream(arr).collect(Collectors.toList()); colList.add(6); log.info("---jdk1.8的Arrays轉化數組爲可編輯list:{}",JSONObject.toJSONString(colList)); log.info("-------------"); List<Integer> colLs = new ArrayList<>(); CollectionUtils.mergeArrayIntoCollection(arr,colLs); colLs.add(7); log.info("----CollectionUtils工具類轉化數組爲list:{}",JSONObject.toJSONString(colLs)); }
這個測試方法裏,數組轉list的正確姿勢就是下面的2種,一種是jdk1.8的stream利用,一種是工具類。其實我是建議使用工具類的,畢竟不用太關注輪子以下是這麼造的。
當然一般情況下,如果僅僅只是轉化個集合類型,進行循環操作,不變更循環本身,直接asList還是可以的,這樣的好處時間對內存消耗會小點,畢竟創建不可變的集合,不用考慮負載因子等。
說明下,工具類的直接CollectionUtils.arrayToList()也是創建的不可變的集合,跟jdk的asList一樣,底層源碼一致。現在jdk免費的只能到1.8,不知道後面的jdk會不會直接提供可變的轉換方法。