對于這個問題的名稱,我很抱歉。 所以我有一個資料類:
data class Day (
val date: Int = 0,
val night: 時間? = null。
val morning: 時間? = null。
val 中午。時間? = null,
val evening: 時間? = null。
)
val days = ArrayList< Day> ()
val listOfDays = this.
.groupBy { it.getDayOfMonth() }
.map { WeatherForDay(it.value) }
.take(FIVE_DAYS_FORECAST)
listOfDays.forEach {
val day = Day()
var weather: 天氣串列
for (hour in it.weather.indices) {
weather = it.weather[hour]
val time = Time(
weather.main.temp,
weather.main.feels_like,
weather.wind.speed,
weather.wind.gust,
weather.wind.deg,
weather.main.pressure。
)
when (it.weather[hour].getTime() ) {
NIGHT_DAYTIME -> day.night = time
MORNING_DAYTIME -> day.morning = time
DAY_DAYTIME -> day.noon = time
EVENING_DAYTIME -> day.evening = time
}
day.date = weather.dt
}
days.add(day)
但我不能這樣做,因為我在資料類中的屬性是值。而我需要它是值。所以我怎樣才能使這段代碼具有正確的val風格呢?
uj5u.com熱心網友回復:
你可以使用day.copy(night = time)方法,它存在于每個資料類。如果你不想要新的分配,我看到的唯一方法是為每個資料類的屬性定義區域變數,并在回圈中設定它們,然后,在迭代結束時,在這些變數的基礎上創建資料類的實體。
uj5u.com熱心網友回復:
重新安排你的代碼,以便你只在擁有所有需要的引數時才實體化這個類。
val listOfDays = this.
.groupBy { it.getDayOfMonth() }
.map { WeatherForDay(it.value) }
.take(FIVE_DAYS_FORECAST)
val days = listOfDays.map { listOfDaysDay ->
val date = listOfDaysDay.weather.firstOrNull()?.dt ? : 0
val timeItemByTime = listOfDaysDay.weather?
.associateBy { it.getTime() }
.map { with (it) {
時間(
main.temp
main.feels_like,
wind.speed,
wind.gust,
風的度數
主要壓力
)
} }
日(
日期。
timeItemByTime[Night_DAYTIME],
timeItemByTime[MORNING_DAYTIME],
timeItemByTime[DAY_DAYTIME],
timeItemByTime[EVENING_DAYTIME], timeItemByTime[EVENING_DAYTIME].
)
}
我上面可能有一些錯誤。由于你的命名方案,很難保持你的型別的一致性。你有一個 "listOfDays",它不是你的Day類的串列,而是其他物體的串列。你有一個名為 "時間 "的類,它不是一個時間,而只是一堆并發的天氣狀況。你還有一個叫做 "時間 "的東西,它顯然是String或Int常量,實際上代表了時間。
還有一個建議。當你有兩個完全獨立的類,并有一堆相同的公共屬性時,你可能想創建一個中間類,這樣你就可以把它們傳遞出去,而不必每次都手動復制六個屬性值。然后,如果你想再增加一個屬性,你就不必修改一大堆類了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311867.html
標籤:
