2017-10-12 68 views
0

我有一段代碼如下(簡化來解釋問題)。從RAWDATA,我想過濾掉那些不具有converter A轉換器類型,然後對剩餘的,轉換datalistitem如何從地圖返回非空項目的列表映射?

data class RawData(val type: String, val data: Data) 
interface Converter { 
    fun convert(data: Data): ListItem 
} 

fun transform(): List<ListItem> { 
    val providerTypeMap = modelViewProvider.associateBy({it.type}, {it}) 

    return rawDataList.filter { 
     converter[it.type] != null 
    }.map { 
     converter[it.type]?.create(it.data) ?: object: ListItem {} 
    } 
} 

注:我想返回類型爲List<ListItem>而不是List<ListItem?>。爲了做到這一點,我需要有這一行

converter[it.type]?.create(it.data) ?: object: ListItem {} 

這對我的??:是很醜陋的,因爲我們知道到那時,我們已經篩選並只保留該converter[it.type] != null

是否有我的方式來擺脫我的代碼中的??: ListItem{}

回答

2

有一個解決方案:

return rawDataList.mapNotNull { 
    converter[it.type]?.create(it.data) 
} 

但我不知道在哪個科特林的版本mapNotNull()方法出現。如果你沒有它,你可以使用建設map {}.filterNotNull()或寫你自己的mapNotNull擴展方法。

+0

我會爲我的公關獲得一個紅色標記:P – Elye

+0

我編輯了答案。覈實。 –

+0

不錯的@Alexandr – Elye

相關問題