我是 Kotlin 的新手,我遇到了如下問題。資料類的結構有點復雜。
我需要在資料類中撰寫一個函式offerSystem來構建整個MyContent類。
我的問題是我想分別將languageinOffer和titlein 的值傳遞OfferDescription給language和titlein ContentItem,但我不知道如何傳遞。
data class OfferSystem(
val id: String,
val offers: List<Offer>
)
data class Offer(
val offerType: String,
val offerDescription: List<OfferDescription>,
val language: Locale
)
data class OfferDescription(
val title: String,
val content: String
)
我想為contents資料類中的一個變數()設定值MyContent。本contents本身就是一個串列ContentItem,其中有幾個變數。
data class MyContent( // there are other val here
val contents: List<ContentItem>
)
data class ContentItem(
val title: String,
val language: Locale,
)
我試過
data class OfferSystem(
val id: String,
val offers: List<Offer>
){
fun toMyContent(): MyContent {
return MyContent(
...
contents = listOf(ContentItem(title = ???, language = ???))
...
)
}
}
我不知道如何提取language和title
uj5u.com熱心網友回復:
我不確定為什么offerDescription是一個串列,但你必須以一種或另一種方式迭代,也許像這樣:
contents = sequence {
offers.forEach { offer ->
offer.offerDescription.forEach -> { description ->
yield(ContentItem(description.title, offer.language)
}
}
}.toList()
uj5u.com熱心網友回復:
您需要迭代嵌套集合以構建您的ContentItem值。
您可以通過首先撰寫如何ContentItem從單個報價(每個描述一個專案)構建串列來分解作業:
fun Offer.toContentItems() = offerDescription.map { ContentItem(it.title, language) }
然后,您可以使用flatMap從通常會創建串列串列的內容中創建一個平面的專案串列。在您的情況下,您有一個Offers串列,它們中的每一個都可以生成一個ContentItems串列:
data class OfferSystem(
val id: String,
val offers: List<Offer>
){
fun toMyContent(): MyContent {
return MyContent(
contents = offers.flatMap { it.toContentItems() }
)
}
}
請注意,此方法會創建中間集合(與@squirrel 提供的序列方法不同),因此如果串列中有很多項,則可能需要使用序列 istead。
uj5u.com熱心網友回復:
首先,您需要添加不會在此轉換中設定為 null 的另一個欄位(例如添加 String? = null)
之后你可以:
var offers: MutableList<Offers>? = null
contents.forEach {
offers.add(Offer(
language = it.language,
offerDescription[0].title = it.title
))
}
因此,您將能夠將創建的報價添加到您的 OfferSystem 類中
var offerSystem = OfferSystem(offers = offers.toList())
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310996.html
