如何在Kotlin中用map和stream获取数组指定索引值并优化打印
问题解决:调整大小写与数组打印格式
1. 大小写修正
要匹配预期的大小写格式,需要对指定位置的字符串做针对性转换:
- 子数组第一个元素:将
obj2的"Milk"转为小写"milk",其余保持原格式 - 子数组最后一个元素:将
obj1的"Africa"转为小写"africa",其余保持原格式
可以使用Kotlin的lowercase()方法(更符合Kotlin现代语法风格)处理目标字符串,也可以用通用规则统一处理(比如第一个元素首字母小写、最后一个元素全小写)。
2. 数组打印格式修正
直接打印ArrayList<Array<String>>时,每个Array<String>会输出默认的对象标识(如[Ljava.lang.String;@5caf905d]),这是因为数组默认的toString()方法不会输出元素内容。要显示实际元素,需调用数组的contentToString()方法,或遍历列表逐个打印数组内容。
修正后的完整代码
fun main(args: Array<String>) { val result: List<String> val obj1 = arrayOf("fruit", "Mangue", "Africa") val obj2 = arrayOf("Milk", "Soja", "Europ") val obj3 = arrayOf("Meat", "cochon","Asia") val myArrayList: ArrayList<Array<String>> = ArrayList<Array<String>>(3) val myList: MutableList<Array<String>> = mutableListOf<Array<String>>() myList.add(obj1) myList.add(obj2) myList.add(obj3) myArrayList.addAll(myList) // 修正大小写逻辑(通用规则版:首元素首字母小写,尾元素全小写) result = myArrayList.stream().map { arr -> val first = arr[0].replaceFirstChar { it.lowercase() } val last = arr[2].lowercase() "$first-$last" }.toList() println("ArrayList of objects :") // 修正打印逻辑,显示数组实际元素 myArrayList.forEach { arr -> println(arr.contentToString()) } println("my list of String result") println(result) }
代码说明
- 通用大小写处理:用
replaceFirstChar { it.lowercase() }将第一个元素的首字母转为小写,lowercase()将最后一个元素转为全小写,无需针对特定字符串判断,适配更多场景。 - 打印处理:通过
forEach遍历列表,对每个数组调用contentToString(),输出数组的实际元素内容(如[fruit, Mangue, Africa])。
运行修正后的代码,输出结果将完全符合预期:
ArrayList of objects : [fruit, Mangue, Africa] [Milk, Soja, Europ] [Meat, cochon, Asia] my list of String result [fruit-africa, milk-Europ, Meat-Asia]
内容的提问来源于stack exchange,提问作者ln3106
相关产品推荐
相关产品推荐

