基於jdk1.8的List、int[ ]、Integer[ ]的相互轉換簡潔寫法及解釋

List< Integer >int[ ]Integer[ ]相互轉換

int[ ]List< Integer >
int[ ]Integer[ ]
Integer[ ]List< Integer >
Integer[ ]int[ ]
List< Integer >int[ ]
List< Integer >Integer[ ]

下文中出現的list、ints、integers分別代表一個列表、一個int數組、一個Integer數組。

int[ ] 轉 List< Integer >

 List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());

Arrays.stream(ints) 之後返回的類型是 IntStreamIntStream 是一個接口繼承自 BaseStreamBaseStream 又繼承自AutoCloseable。所以我把IntStream看成一個方便對每個整數做操作的數據流。
之後調用了 boxed(),它的作用是對每個整數進行裝箱,基本類型流轉換爲對象流,返回的是 Stream<Integer>Stream 也是繼承自 BaseStream。所以這一步的作用是把 IntStream 轉換成了 Stream<Integer>
最後通過collect方法將數據流 (Stream<Integer>) 收集成了集合 ( List<Integer>),這裏 collect 方法裏傳入的是一個收集器 (Collector),它通過 Collectors.toList() 產生。

小結:

  1. Arrays.stream(ints) 將基本類型數組轉換爲基本類型流。 int[ ] => IntStream
  2. .boxed() 將基本類型流轉換爲對象流。 => Stream< Integer >
  3. .collect(Collectors.toList()) 將對象流收集爲集合。 => List< Integer >

int[ ] 轉 Integer[ ]

Integer[] integers = Arrays.stream(ints).boxed().toArray(Integer[]::new);

一樣的內容就不重複了,toArray(T[ ] :: new) 方法返回基本類型數組。
小結:

  1. Arrays.stream(ints) 將基本類型數組轉換爲基本類型流。 int[ ] => IntStream
  2. .boxed()將基本類型流轉換爲對象流。=> Stream< Integer >
  3. .toArray(Integer[ ]::new) 將對象流轉換爲對象數組。=> Integer[ ]

Integer[ ]轉 List< Integer >

List<Integer> list = Arrays.asList(integers);

這個就很簡單了,通過Arrays類裏的asList方法將數組裝換爲List。這裏有2點值得注意:

  1. 這裏的list類型是ArrayList,全文都是。
  2. 想用Arrays.asList(源數組)的方法得到一個 list,那麼源數組的類型必須和返回的 List的泛型類型一致,這也是爲什麼int類型的數組不能直接用 asList 方法的原因,int 不是一個 Object 類型。

Integer[ ]轉 int[ ]

int[] ints = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();

map的意思是把每一個元素進行同樣的操作。mapToInt的意思是把每一個元素轉換爲intmapToInt(Integer::valueOf)方法返回的是IntStream
小結:

  1. Arrays.stream(integers) 將對象數組轉換爲對象流。 Integer[ ]=> Stream< Integer >
  2. .mapToInt(Integer::valueOf) 將對象流轉換成基本類型流。=> IntStream
  3. .toArray() 將基本類型流轉換爲基本類型數組。 => int[ ]

List< Integer > 轉 int[ ]

int[] ints = list.stream().mapToInt(Integer::valueOf).toArray();

經過上面的說明,相信這裏已經很好理解了,直接小結。
小結:

  1. list.stream() 將列表裝換爲對象流。List< Integer > => Stream< Integer >
  2. .mapToInt(Integer::valueOf)將對象流轉換爲基本數據類型流。=> IntStream
  3. .toArray()將基本數據類型流轉換爲基本類型數組。=>int[ ]

List< Integer > 轉 Integer[ ]

Integer[] integers = list.toArray(new Integer[list.size()]);

這個也很簡單,方法裏的參數是一個數組,所以要規定長度。也有無參的方法,但是要進行轉型,所以不推薦使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章