为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Kotlin 将列表转换为地图

如何使用 Kotlin 将列表转换为地图

慕少森 2022-07-20 09:58:11
我正在尝试从列表中构建地图。我的目标是比较两个列表并发现这两个列表之间的差异。然后,我想构建一个地图,以便知道我在哪个索引中发现了差异。我是用 Java 做的,我相信不是很好,但它确实有效。//I compare the two values for a given index, if value are the same, I set null in my result listList<String> result = IntStream.range(0, list1.size()).boxed()                .map(i -> list1.get(i) != list2.get(i) ? (list1.get(i)  + " != "+ list2.get(i)) : null)                .collect(Collectors.toList());//I filter all the null values, in order to retrieve only the differences with their indexMap<Integer, String> mapResult =            IntStream.range(0, result.size())            .boxed().filter(i-> null != result.get(i))            .collect(Collectors.toMap(i -> i,result::get));这不是最佳的,但它正在工作。如果您对这些代码行有任何建议,我很乐意接受。我在 Kotlin 中尝试了两次复制这种行为,但我没有成功使用 map() 构造函数。(我还在学习Kotlin,不是很熟悉)。谢谢您的帮助。
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您可以zip在集合中使用函数来连接两个元素。该withIndex()函数有助于将列表转换为元素索引和值对的列表。完整的解决方案可能如下



    val list1 = listOf("a", "b", "c")

    val list2 = listOf("a", "B", "c")


    val diff : Map<Int, String> = list1.withIndex()

        .zip(list2) { (idx,a), b -> if (a != b) idx to "$a != $b" else null}

        .filterNotNull().toMap()

请注意,zip当两个列表中都有元素时,该函数会进行迭代,它将跳过任何列表中可能存在的剩余部分。可以通过使用以下函数添加空元素来修复它:



fun <T> List<T>.addNulls(element: T, toSize: Int) : List<T> {

    val elementsToAdd = (toSize - size)

    return if (elementsToAdd > 0) {

        this + List(elementsToAdd) { element }

    } else {

        this

    }

}

并在使用该函数之前在两个列表上调用该zip函数


查看完整回答
反对 回复 2022-07-20
  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信