• Java中List, Integer[], int[]的相互转换


    相信新手们在学习Java的过程中都会遇到和我一样的问题:想要把List<Integer>和int[]相互转换太麻烦了。

    List<String>和String[]也同理。难道每次非得写一个循环遍历吗?其实一步就可以搞定。

    本文涉及到一些Java8的特性。如果没有接触过就先学会怎么用,然后再细细研究。

        import java.util.Arrays;
        import java.util.List;
        import java.util.stream.Collectors;
         
        public class Main {
            public static void main(String[] args) {
                int[] data = {4, 5, 3, 6, 2, 5, 1};
         
                // int[] 转 List<Integer>
                List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList());
                // Arrays.stream(arr) 可以替换成IntStream.of(arr)。
                // 1.使用Arrays.stream将int[]转换成IntStream。
                // 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。
                // 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。
         
                // int[] 转 Integer[]
                Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new);
                // 前两步同上,此时是Stream<Integer>。
                // 然后使用Stream的toArray,传入IntFunction<A[]> generator。
                // 这样就可以返回Integer数组。
                // 不然默认是Object[]。
         
                // List<Integer> 转 Integer[]
                Integer[] integers2 = list1.toArray(new Integer[0]);
                //  调用toArray。传入参数T[] a。这种用法是目前推荐的。
                // List<String>转String[]也同理。
         
                // List<Integer> 转 int[]
                int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray();
                // 想要转换成int[]类型,就得先转成IntStream。
                // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream
                // 而IntStream中默认toArray()转成int[]。
         
                // Integer[] 转 int[]
                int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray();
                // 思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。
         
                // Integer[] 转 List<Integer>
                List<Integer> list2 = Arrays.asList(integers1);
                // 最简单的方式。String[]转List<String>也同理。
         
                // 同理
                String[] strings1 = {"a", "b", "c"};
                // String[] 转 List<String>
                List<String> list3 = Arrays.asList(strings1);
                // List<String> 转 String[]
                String[] strings2 = list3.toArray(new String[0]);
         
            }
        }

     由此可见,流操作还是很方便的。以上给刚接触的人提供一个思考的方向。

  • 相关阅读:
    微软面试题: LeetCode 907. 子数组的最小值之和 middle 出现次数:1
    微软面试题: LeetCode 5. 最长回文子串 出现次数:1
    微软面试题: LeetCode 120. 三角形最小路径和 出现次数:1
    开源项目推荐:主流RPC开源框架及知识科普
    微软面试题: LeetCode 84. 柱状图中最大的矩形 出现次数:1
    需重点掌握的三大排序: 快速排序 + 归并排序 + 堆排序
    微软面试题:补充题12. 二叉树的下一个节点 出现次数:2
    微软面试题: 剑指 Offer 51. 数组中的逆序对 出现次数:2
    GUI
    数据结构与算法
  • 原文地址:https://www.cnblogs.com/snake23/p/10399541.html
Copyright © 2020-2023  润新知