gpt4 book ai didi

java - Kotlin:集合的多种操作

转载 作者:行者123 更新时间:2023-11-30 05:49:35 27 4
gpt4 key购买 nike

编辑:

我不得不退回一组享有大部分折扣的乘客。这个谜语的答案如下:

  1. 提取 map 中的所有乘客数量
  2. 提取 map 中所有乘客的数量收到折扣。
  3. 然后在循环中我必须应用 lambda 来查找百分比并查看是否哪些乘客在大部分行程中都获得了折扣。
  4. 将它们添加到集合中并将其返回。

请参阅下面的代码,

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()
}

我的代码看起来比 Kotlin 更接近 Java 风格,因为它不是那么简洁/简短或优化。我创建了两个不同的组,从而生成了两张 map ;然后创建一个循环来应用其余的逻辑。我认为可以删除一些不必要的步骤。

示例:列表转换为集合返回结果等。

如何避免创建两个组导致两张不同的 map ?我可以从步骤 1 到步骤 4 应用哪些优化?我可以以任何方式利用分区(不确定这个概念)来减少我在上面的代码中执行的步骤数吗?

谢谢。

最佳答案

正如评论中已经提到的,我不太理解你的用例,我认为你对 groupingBy 的使用没有意义。您正在尝试计算 trips 内出现的乘客数量我的建议是:#

val (passengersWithDiscount, passengersWithoutDiscount) = trips.partition { it.discount != null && it.discount > 0.0 }.let { (with, withOut) ->
val counter = { trips: List<Trip> -> trips.flatMap { it: Trip -> it.passengers }.count() }
counter(with) to counter(withOut)
}

partition ,我们根据条件分割数据。之后,我们声明一个计数器函数,它转换 List<Trip>其乘客数量。然后将此函数应用于我们从 partition 获得的两个结果列表。 。

关于java - Kotlin:集合的多种操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54174326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com