美文网首页Kotlin
List、Set、Map、数组互转(Java和Kotlin对比)

List、Set、Map、数组互转(Java和Kotlin对比)

作者: Mew888 | 来源:发表于2022-12-08 10:03 被阅读0次

    有时候Java(针对JDK8)和Kotlin混合开发,相互调用过程中,经常有一些集合和数组的互转,使用不当或不清楚会出现调用类型不匹配问题或其它报错,本篇整理一下。国际规则,直接上测试代码,仅供参考

    List、Set、Map、数组互转(Java版本)

    /**
     * List 转为 String 数组
     */
    private static void listToStringArr() {
        List<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        // 方法1:
        String[] str = list.toArray(new String[list.size()]);
        // 方法2:
        String[] str2 = new String[list.size()];
        for(int i=0;i<list.size();i++) {
            str2[i] = list.get(i);
        }
    }
    
    /**
     * String 数组 转为List
     */
    private static void stringArrToList() {
        String[] strs = {"a","b","c"};
        // 方法1:
        List<String> list = Arrays.asList(strs);
        //list这个集合是不可修改的,还需要进一步转换
        List<String> list2 = new ArrayList<>(list);
        // 方法2:
        List<String> list3 = new ArrayList<>();
        Collections.addAll(list3, strs); //内部循环赋值
    }
    
    
    /**
     * list转set
     */
    private static void listToSet() {
        List<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        Set<String> set = new HashSet(list);
    
    }
    
    /**
     * set转list
     */
    private static void setToList() {
        Set<String> set = new HashSet();
        set.add("a");
        set.add("b");
        set.add("c");
        List<String> list=new ArrayList<>(set);
    }
    
    
    
    /**
     * map转set
     */
    private static void mapToSet() {
        Map<String,Integer> map = new HashMap();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
    
        Set<String> keySet = new HashSet(map.keySet());
        //value同理
    
    }
    
    /**
     * map转list
     */
    private static void mapToList() {
        Map<String,Integer> map = new HashMap();
        map.put("a", 1);
        map.put("b", 2);
        map.put("c", 3);
    
        List<String> keyList = new ArrayList(map.keySet());
        //value同理
    }
    

    List、Set、Map、数组互转(Kotlin版本,含可变和不可变集合转换)

        /**
         * List 转为 String 数组
         */
        fun listToStringArr() {
            val list: MutableList<String> = ArrayList()
            list.add("a")
            list.add("b")
            list.add("c")
            // 方法1:
            val str = list.toTypedArray()
    
            // 方法2:
            val str2 = arrayOfNulls<String>(list.size)
            for (i in list.indices) {
                str2[i] = list[i]
            }
        }
    
      /**
         * String 数组 转为List
         */
        fun stringArrToList() {
            val strs = arrayOf("a", "b", "c")
    
            //转为不可变集合
            val list1= Arrays.asList(strs) 
            // or
            val list2 = strs.asList()
            //or
            val list3 = listOf(strs)
    
    
            //转为转为可变集合
    
            val mutableList: MutableList<String> = strs.toMutableList()
    
    
        }
    
    
    
        /**
         * list转set
         */
        fun listToSet() {
            val list: MutableList<String> = ArrayList()
            list.add("a")
            list.add("b")
            list.add("c")
            //转为不可变集合
            val set1: Set<String> = HashSet<String>(list)
            //or
            val set2 = setOf(list)
    
            //转为可变集合
            val mutableSet= HashSet(list)
            //or
            val mutableSet1= mutableSetOf(list)
            //or
            val mutableSet2= hashSetOf(list)
    
    
        }
    
        /**
         * set转list
         */
        fun setToList() {
            val set: MutableSet<String> = HashSet<String>()
            set.add("a")
            set.add("b")
            set.add("c")
            //转为不可变集合
            val list1: List<String> = ArrayList<String>(set)
            //or
            val list2 = listOf(set)
    
            //转为可变集合
            val mutableList =ArrayList(set)
            //or
            val mutableList1 =mutableListOf(set)
            //or
            val mutableList2 = arrayListOf(set)
        }
    
    
    
    
        /**
         * map转set
         */
        fun mapToSet() {
    //        val map: MutableMap<String, Int> = HashMap()
            //or
    //        val map: MutableMap<String, Int> = hashMapOf()
            //or
            val map= hashMapOf<String, Int>() //mutableMapOf对应LinkedHashMap
            map["a"] = 1
            map["b"] = 2
            map["c"] = 3
            //转为不可变集合
            val keySet1: Set<String> = HashSet<String>(map.keys)
            //or
            val keySet2= setOf(map.keys)
    
    
            //转为可变集合
            val keyMutableSet= HashSet(map.keys) //对应HashSet
            //or
            val keyMutableSet1= mutableSetOf(map.keys) //对应LinkedHashSet
            //or
            val keyMutableSet2= hashSetOf(map.keys) //对应HashSet
    
    
        }
    
        /**
         * map转list
         */
        fun mapToList() {
            val map= hashMapOf<String, Int>()
            map["a"] = 1
            map["b"] = 2
            map["c"] = 3
            //转为不可变集合
            val keyList1: List<String> = ArrayList<String>(map.keys)
            //or
            val keyList2 = listOf(map.keys)
    
            //转为可变集合
            //or
            val keyMutableList = ArrayList(map.keys)
            //or
            val keyMutableList1 =mutableListOf(map.keys)
            //or
            val keyMutableList2 = arrayListOf(map.keys)
    
        }
    

    根据上面可知,在Kotlin中调用Java方法传参,必须使用Kotlin可变集合对应Java的可变集合,Java不可变集合是JDK9 以上版本的新特征,道理是一样的。

    相关文章

      网友评论

        本文标题:List、Set、Map、数组互转(Java和Kotlin对比)

        本文链接:https://www.haomeiwen.com/subject/gbanfdtx.html