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)
之後返回的類型是 IntStream
,IntStream
是一個接口繼承自 BaseStream
,BaseStream
又繼承自AutoCloseable
。所以我把IntStream
看成一個方便對每個整數做操作的數據流。
之後調用了 boxed()
,它的作用是對每個整數進行裝箱,基本類型流轉換爲對象流,返回的是 Stream<Integer>
,Stream
也是繼承自 BaseStream
。所以這一步的作用是把 IntStream
轉換成了 Stream<Integer>
。
最後通過collect
方法將數據流 (Stream<Integer>)
收集成了集合 ( List<Integer>)
,這裏 collect
方法裏傳入的是一個收集器 (Collector)
,它通過 Collectors.toList()
產生。
小結:
Arrays.stream(ints)
將基本類型數組轉換爲基本類型流。int[ ] => IntStream
.boxed()
將基本類型流轉換爲對象流。=> Stream< Integer >
.collect(Collectors.toList())
將對象流收集爲集合。=> List< Integer >
int[ ] 轉 Integer[ ]
Integer[] integers = Arrays.stream(ints).boxed().toArray(Integer[]::new);
一樣的內容就不重複了,toArray(T[ ] :: new)
方法返回基本類型數組。
小結:
Arrays.stream(ints)
將基本類型數組轉換爲基本類型流。int[ ] => IntStream
.boxed()
將基本類型流轉換爲對象流。=> Stream< Integer >
.toArray(Integer[ ]::new)
將對象流轉換爲對象數組。=> Integer[ ]
Integer[ ]轉 List< Integer >
List<Integer> list = Arrays.asList(integers);
這個就很簡單了,通過Arrays
類裏的asList
方法將數組裝換爲List
。這裏有2點值得注意:
- 這裏的
list
類型是ArrayList
,全文都是。 - 想用
Arrays.asList(源數組)
的方法得到一個list
,那麼源數組的類型必須和返回的List
的泛型類型一致,這也是爲什麼int
類型的數組不能直接用asList
方法的原因,int
不是一個Object
類型。
Integer[ ]轉 int[ ]
int[] ints = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();
map
的意思是把每一個元素進行同樣的操作。mapToInt
的意思是把每一個元素轉換爲int
。mapToInt(Integer::valueOf)
方法返回的是IntStream
。
小結:
Arrays.stream(integers)
將對象數組轉換爲對象流。Integer[ ]=> Stream< Integer >
.mapToInt(Integer::valueOf)
將對象流轉換成基本類型流。=> IntStream
.toArray()
將基本類型流轉換爲基本類型數組。=> int[ ]
List< Integer > 轉 int[ ]
int[] ints = list.stream().mapToInt(Integer::valueOf).toArray();
經過上面的說明,相信這裏已經很好理解了,直接小結。
小結:
list.stream()
將列表裝換爲對象流。List< Integer > => Stream< Integer >
.mapToInt(Integer::valueOf)
將對象流轉換爲基本數據類型流。=> IntStream
.toArray()
將基本數據類型流轉換爲基本類型數組。=>int[ ]
List< Integer > 轉 Integer[ ]
Integer[] integers = list.toArray(new Integer[list.size()]);
這個也很簡單,方法裏的參數是一個數組,所以要規定長度。也有無參的方法,但是要進行轉型,所以不推薦使用。