1 回答

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊
您想轉(zhuǎn)換按列表分組的值,因此:
emailMesssages.groupBy(
{ MessageDestination(it.second) },
{ it.first }
)
長版:
好的,所以你開始: emailMesssages: List<Pair<MessageSender, String>> 并且你想把它轉(zhuǎn)換成類型Map<MessageDestination, List<MessageSender>>
您正試圖通過emailMesssages.groupBy { MessageDestination(it.second) }. groupBy它按您指定的鍵對列表中的項(xiàng)目進(jìn)行了哪些分組。重要的是它將Pair一個鍵的所有項(xiàng)目(在本例中為所有s)組合到列表中。
所以如果你有(來自官方文檔的樣本):
val words = listOf("a", "abc", "ab", "def", "bc")
val byLength = words.groupBy { it.length }
然后 byLength 是:
1 -> listOf("a")
2 -> listOf("ab", "bc")
3 -> listOf("abc", "def")
這解釋了為什么你有 typeMap<MessageDestination, List<Pair<MessageSender, String>>>而不是Map<MessageDestination, List<MessageSender>>.
您想要做的不是對列表中的項(xiàng)目進(jìn)行分組,而是希望對列表中的項(xiàng)目中的轉(zhuǎn)換值進(jìn)行分組。
基本上你想要的是'groupBy'的另一個變體,帶有keySelector AND valueTransform:
inline fun <T, K, V> Array<out T>.groupBy(
keySelector: (T) -> K,
valueTransform: (T) -> V
): Map<K, List<V>> (source)`
在你的情況下,這看起來像這樣:
emailMesssages.groupBy(
{ MessageDestination(it.second) },
{ it.first }
)
添加回答
舉報(bào)