将密钥列表平面化并设置成对列表

时间:2018-11-07 11:50:54

标签: kotlin

我正在上一个在线课程,并且读错了一个问题(这就是为什么我认为可以发布此问题,因为答案与课程中的要求无关!)。

data class Trip(
        val driver: Driver,
        val passengers: Set<Passenger>,
        ...
)

val trips: List<Trip>

所以最终会变成

[
    driver1 : passenger1
    driver1 : passenger2
    driver2 : passenger1
    driver2 : passenger3
...
]

我想做的是创建一个驾驶员和乘客所有实例的列表,可能成对出现,而我只是想不起来怎么做。

trips.map {t -> Pair (t.driver, t.passengers)} 

为我提供了一些东西,但显然让我离开的是乘客,而不是驾驶员:乘客对。 II无法获取平面图的语法,因此

 trips.flatMap {t -> Pair (t.driver, t.passengers)} 

抱怨我理解这对是不可迭代的,但是我不知道如何解压套件并保持与驾驶员的单独链接?

(我在撰写此问题时注意到的实际问题为您提供了一个单独的司机来查找乘客,这使事情变得相当简单,我已经做到了……)

1 个答案:

答案 0 :(得分:3)

那么对于每次旅行,您想要驾驶员/乘客的每种组合,然后您想要所有这些的列表?如果是这样,会这样做吗?

trips.flatMap { trip -> 
    trip.passengers.map { passenger -> 
        Pair(trip.driver, passenger) 
    } 
}

这就是您要的List<Pair<Driver, Passenger>>,如果您正在寻找的?它可能包含重复项,因此您可能希望以某种方式进行处理。