int[], Integer[], List<Integer>, List<String> 这四个对象直接互相转换是尤为常用的,主要是需要jdk1.8的流的概念。
这里我做了一次完整的总结,在忘记的时候,方便快速查阅。
1.int[ ] 转成 Integer[ ], List<Integer>, List<String>
/**
* 1.
* int[] 转成
* Integer[]
* List<Integer>
* List<String>
*/
public void intsToIntegers() {
int[] ints = new int[]{1, 2, 3, 4};
// 1. int[] 转成 Integer[]
Integer[] integers = Arrays.stream(ints).boxed().toArray(Integer[]::new);
// 2. int[] 转成 List<Integer>
List<Integer> integerList = Arrays.stream(ints).boxed().collect(Collectors.toList());
// 3. int[] 转成 List<String>
List<String> strList = Arrays.stream(ints).boxed() // 一定要boxed
.map(String::valueOf)
.collect(Collectors.toList());
// 转成List<Integer> 然后再用map转成String,最后用collect转成List<String>
}
2. Integer[ ] 转成 int[ ] , List<Integer>, List<String>
/**
* 2.
* Integer[] 转成
* int[]
* List<Integer>
* List<String>
*/
public void integersToInts() {
Integer[] integers = new Integer[]{1, 2, 3, 4};
// 1. Integer[] 转成 int[]
int[] ints = Arrays.stream(integers).mapToInt(Integer::valueOf).toArray();
// 2. Integer[] 转成 List<Integer> 该list不能add, remove操作
List<Integer> integerList = Arrays.asList(integers);
// 3. Integer[] 转成 List<Integer> 该list支持所有操作
List<Integer> integerList1 = new ArrayList<>(Arrays.asList(integers));
//4. Integer[] 转成 List<String>
List<String> strList = Arrays.stream(integers)
.map(String::valueOf)
.collect(Collectors.toList());
}
3. List<Integer> 转成 int[], Integer[], List<String>
/**
* 3.
* List<Integer> 转成
* int[]
* Integer[]
* List<String>
*/
public void listToIntegersAndInts() {
// 创建方式1
List<Integer> list = new ArrayList() {{
add(1);
add(2);
add(3);
}};
// 创建方式2
List<Integer> list1 = Arrays.asList(1, 2, 3);
// 1. List<Integer> 转成 int[]
int[] ints = list.stream().mapToInt(Integer::valueOf).toArray(); // 转成流 再转成Integer[] 再转int
// 2. List<Integer> 转成 Integer[]
Integer[] integers1 = list.toArray(new Integer[0]);
Integer[] integers2 = list.stream().toArray(Integer[]::new);
//3. List<Integer> 转成 List<String>
List<String> strList = list.stream()
.map(String::valueOf)
.collect(Collectors.toList());
}
4. List<String> 转成 int[], Integer[], List<List>
/**
* 4.
* List<String> 转成
* int[]
* Integer[]
* List<Integer>
*/
public void strsToIntegersAndInts() {
List<String> strList = Arrays.asList("1", "2", "3");
// 1.List<String> 转成 int[]
int[] ints = strList.stream().mapToInt(Integer::valueOf).toArray(); // 和List<Integer>转换一样
// 2.List<String> 转成 Integer[]
Integer[] integers = strList.stream().mapToInt(Integer::valueOf).boxed().toArray(Integer[]::new); // 和List<Integer>转换一样
// 3.List<String> 转成 List<Integer>
List<Integer> integerList = strList.stream()
.mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
print(ints);
print(integers);
print(integerList);
}
总结一下注意要点:
1. int[] 要转成List对象 ,一定要用boxed,转成Integer
Arrays.stream(ints).boxed().map(xxx).collection();
2. List<Integer> 互相转换 List<String> ,string转Integer一定要在mapToInt后,用boxed(),转成Integer
List<String> strList = list.stream()
.map(String::valueOf)
.collect(Collectors.toList());
List<Integer> integerList = strList.stream()
.mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
3.其他的话,就用stream.toArray()是返回T[] , stream.collect()是返回Collection对象(list, set等)