亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號