我有一組長值
Set<Long> ids = {1,2,3,4}
我想實作的是
Set<Map<Long, Set<Long>>
從這個 id 集合中,我需要設定包含 4 個元素的集合,例如:
Set: {
Map -> key: 1, values: 2,3,4
Map -> key: 2, values: 1,3,4
Map -> key: 3, values: 1,2,4
Map -> key: 4, values: 1,2,3
}
我怎樣才能通過stream或者 kotlin獲得它groupBy?
有人會有這樣的地圖嗎?(沒有fororwhile回圈的解決方案)
uj5u.com熱心網友回復:
您可以使用 usemap方法轉換每個元素,Map然后將其收集到set
var set = setOf(1, 2, 3, 4)
var map = set.map { v -> mapOf(v to set.filter { it != v }.toSet()) }
.toSet()
但是,foreach由于性能或可讀性,我不認為它比簡單回圈好得多
uj5u.com熱心網友回復:
對 kotlin 的看法
groupBy
請注意,groupBy可以將原始集合拆分為幾個沒有交集的集合。所以不可能直接用groupBy函式構造提到的地圖。
下面利用解決方案的groupBy獲得時result,但result2更加明確的閱讀和符合直覺:
fun main() {
val set = setOf(1, 2, 3, 4)
val result = set
.groupBy { it }
.mapValues { (_, values) -> set.filter { it !in values } }
println(result) // {1=[2, 3, 4], 2=[1, 3, 4], 3=[1, 2, 4], 4=[1, 2, 3]}
val result2 = HashMap<Int, List<Int>>().apply {
set.forEach { this[it] = (set - it).toList() }
}
println(result2) // {1=[2, 3, 4], 2=[1, 3, 4], 3=[1, 2, 4], 4=[1, 2, 3]}
}
uj5u.com熱心網友回復:
這將是一個 for 回圈的可能解決方案:
val ids: Set<Long> = setOf(1, 2, 3, 4)
var result: MutableSet<Map<Long, Set<Long>>> = mutableSetOf()
for (id in ids) {
result.add(mapOf(id to ids.filter { it != id }.toSet()))
}
println(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369664.html
上一篇:有沒有一種快速的方法來獲取二進制值中等于1的位的索引?
下一篇:BFS和DFS復雜度
