#kotlin
Вопрос:
Как я могу успешно сделать что-то подобное?
trips.groupBy { Passenger::name if Passenger in it.passengers}
Я хочу изменить List<Trips>
порядок, который должен List<Passengers>
быть [PassengerA: List<Trips>, PassengerB:...]
Комментарии:
1. Нужно немного больше информации. Если в поездках есть список пассажиров, хотите ли вы создать новые списки поездок, в которых в списках пассажиров есть только один пассажир, поэтому имеет смысл связать их с одним пассажиром? Или вы хотите, чтобы каждый Пассажир был связан со списком поездок, участником которых он является, так что один и тот же экземпляр Поездки будет отображаться несколько раз на окончательной карте, поскольку он связан с несколькими разными пассажирами?
2. ответ ниже-95% от того, что мне было нужно, я просто забыл добавить некоторую информацию, которую я добавил в качестве комментария.
Ответ №1:
Если я правильно понял ваш вопрос, это может быть способ сделать то, что вы хотите:
val passengersToTrips = trips
.flatMap { trip ->
// Associate every passenger in a trip to the trip: this results in a List<Pair<Passenger, Trip>>
trip.passengers.map { passenger -> passenger to trip }
}
.groupBy(
// Group using the passenger as key (use passenger.name in case the name should be the key)
keySelector = { (passenger, _) -> passenger },
// Extracting only the trip from the pair to transform from List<Pair<Passenger, Trip> into List<Trip>
valueTransform = { (_, trip) -> trip }
)
Комментарии:
1. большое вам спасибо! это именно то, что мне нужно, но я упустил одну информацию. Как я могу также учитывать пассажиров, которые находятся в списке всех пассажиров, чтобы они также были включены в качестве пассажира:A : Пустой список() ? какой момент лучше использовать
Passenger::name
? Я все еще учусь, извините за вопросы2. Вы можете просто добавить на карту пассажиров, которых на ней нет:
val withEmpty = passengersToTrips (allPassengers - passengersToTrips.keys).associateWith { emptyList() }
3. Мы также можем сделать это с помощью:
allPassengers.associateWith { passengersToTrips[it] ?: emptyList() }
.4. большое всем спасибо. я только начинаю с kotlin (1 неделя), и этот стиль для меня очень труден. Любые рекомендации по книге будут высоко оценены, а также, что вы думаете об Атомарном Котлине?
5. @broot не могли бы вы немного объяснить, как это работает под капотом, я действительно не понимаю, как список allpassangers можно переставить на основе пассажиров в поездки[it]… так что я могу применить эту концепцию во многих сценариях