第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

錯誤 Kotlin 類型推斷失敗預(yù)期類型不匹配 Map<MessageDestination

錯誤 Kotlin 類型推斷失敗預(yù)期類型不匹配 Map<MessageDestination

瀟湘沐 2021-10-27 16:22:49
我試圖操縱數(shù)據(jù)的結(jié)構(gòu),以便我可以將它傳遞給這個函數(shù)fun handleRequests(messages: Map<MessageDestination, List<MessageSender>>): Either<Errors.RequestError, Unit>。但我不斷收到此錯誤: syntaxerrorError:(27, 63) Kotlin: Type inference failed. Expected type mismatch: inferred type is Map<MessageDestination, List<Pair<MessageSender, String>>> but Map<MessageDestination, List<MessageSender>> was expected.我需要將我的數(shù)據(jù)轉(zhuǎn)換為,Map<MessageDestination, List<MessageSender>>但我不知道該怎么做。這是代碼:package testp.package1.handlersimport arrow.core.Eitherimport arrow.core.flatMapimport com.amazonaws.services.lambda.runtime.Contextimport com.amazonaws.services.lambda.runtime.RequestHandlerinterface InterfaceService {    fun handleRequests(messages: Map<MessageDestination, List<MessageSender>>): Either<Errors.RequestError, Unit>}abstract class AbstractMessageHandler(        override val service: InterfaceService =                ServiceImpl()) : MessageHandler<MyMessage>() {    abstract val emailType: ServiceImpl.Companion.EmailType    override val emailParser: IMessageParser<MyMessage> = M2MessageParser()    override fun handle(event: List<String>): Either<Errors.RequestError, Pair<List<Errors.RequestError>, Int>> =            emailParser.parseEmails(event)                    .map { (error, messages) ->                        error to messages.map { myMessage ->                            MessageSender(message = myMessage.environment) to myMessage.emailAdrress                        }                    }                    .flatMap { (errors: List<Errors.RequestError>, emailMesssages: List<Pair<MessageSender, String>>) ->                        service.handleRequests(emailMesssages.groupBy { MessageDestination(it.second) }).map {                            Pair(errors, emailMesssages.size)                        }                    }}data class MessageDestination(val emailAddress: String)data class MyMessage(val environment: String, val emailAdrress: String, val phoneId: String)data class MessageSender(val message: String)
查看完整描述

1 回答

?
holdtom

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 }

)


查看完整回答
反對 回復(fù) 2021-10-27
  • 1 回答
  • 0 關(guān)注
  • 385 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號