Kotlin

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

2022-12-08  本文已影响0人  Mew888

有时候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 以上版本的新特征,道理是一样的。

上一篇 下一篇

猜你喜欢

热点阅读