Изменить:
Пришлось возвращать набор пассажиров, у которых было большинство скидок. Решение этой загадки было следующим:
- Извлечь все количество пассажиров на карте
- Извлеките все количество пассажиров на карте, получивших скидки.
- Затем в цикле мне пришлось применить лямбду, чтобы найти процент и посмотреть, получили ли пассажиры скидку на большинство поездок.
- Добавьте их в набор и верните его.
Пожалуйста, смотрите код ниже,
fun findDiscountedPassengers(): Set<Passenger> {
var discountedPassengerList: MutableList<Passenger> = emptyList<Passenger>().toMutableList()
var passengerTripCountMap = trips.flatMap { it.passengers }.groupingBy { it }.eachCount()
var passengerDiscountedTripsMap = trips.filter { it.discount != null }
.flatMap { it: Trip -> it.passengers }
.groupingBy { it }
.eachCount()
val findPercentage = ...
passengerDiscountedTripsMap.forEach { it: Map.Entry<Passenger, Int> ->
val totalTripsCount: Double? = passengerTripCountMap.get(it.key)?.toDouble()
if (findPercentage(it.value.toDouble(), totalTripsCount?:0.0) > majorPercentage) {
discountedPassengerList.add(it.key)
}
}
return discountedPassengerList.toSet()
}
Мой код кажется немного более похожим на Java, чем Kotlin, поскольку он не такой лаконичный/короткий или оптимизированный. Я создал две разные группы, что привело к двум картам; затем создайте цикл для применения остальной логики. Я думаю, что можно удалить ненужные шаги.
Пример: преобразование списка в набор для возврата результата и т. д.
Как я могу избежать создания двух групп, приводящих к двум разным картам? Какие оптимизации я могу применить на этапах с 1 по 4? Могу ли я каким-либо образом использовать Partition (не уверен в концепции), чтобы уменьшить количество шагов, которые я предпринял в приведенном выше коде?
Спасибо.
trips.partition { it.discount != null && it.discount > 0.0 }
вернет Пару поездок со скидкой и без. - person Damon Baker   schedule 14.01.2019eachCount
, а потом берете только ключи? Не могли бы вы поделиться структурами данных, пожалуйста? - person s1m0nw1   schedule 14.01.2019