1 回答
TA贡献1805条经验 获得超10个赞
您想转换按列表分组的值,因此:
emailMesssages.groupBy(
{ MessageDestination(it.second) },
{ it.first }
)
长版:
好的,所以你开始: emailMesssages: List<Pair<MessageSender, String>> 并且你想把它转换成类型Map<MessageDestination, List<MessageSender>>
您正试图通过emailMesssages.groupBy { MessageDestination(it.second) }. groupBy它按您指定的键对列表中的项目进行了哪些分组。重要的是它将Pair一个键的所有项目(在本例中为所有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>>.
您想要做的不是对列表中的项目进行分组,而是希望对列表中的项目中的转换值进行分组。
基本上你想要的是'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 }
)
添加回答
举报