Из того, что я понимаю из вашего кода, он должен работать с использованием flatMap
, например ::
newTeam.asSequence().flatMap { stats ->
stats.Striker.asSequence().map {
it to stats.Goals // just a convenience extension function to simplify writing Pair(it, stats.Goals)
}
}
При условии следующих data classes
и вспомогательных функций:
data class TeamStats(val team : Team, val Striker: Set<Striker>, val Goals : Int?)
data class Team(val i : Int)
data class Striker(val name : String)
fun player(i : Int) = Striker("Player $i")
fun team(i : Int) = Team(i)
fun players(i : IntRange) = i.asSequence().map(::player).toSet()
В качестве альтернативы вышеприведенному (и с показанным классом TeamStats
), вы также можете использовать деструктурирование следующим образом:
newTeam.asSequence().flatMap { (_, strikers, goals) ->
strikers.asSequence().map {
it to goals
}
}
, который даст следующий результат:
Stats: [(Striker(name=Player 1), 3), (Striker(name=Player 1), 5), (Striker(name=Player 2), 5)]
Или, если вы не возражаете против создания промежуточных списков, вы также можете просто использовать вышеперечисленное без asSequence()
, например ::
newTeam.flatMap { (_, strikers, goals) ->
strikers.map {
it to goals
}
}