gpt4 book ai didi

kotlin - 我几天的循环很长

转载 作者:行者123 更新时间:2023-12-02 13:14:18 24 4
gpt4 key购买 nike

我有以下 data structure ,其中包括交易日期和数量,如 day stamp以毫秒为单位

data class transaction (var date: LocalDate, var quantity: Double) {

private var calendar: Calendar =
GregorianCalendar(date.year, (date.monthValue + 1), date.dayOfMonth)

var day_stamp: Long = calendar.timeInMillis
}

以上用于定义2个变量数组:
var salesOrders = ArrayList<transaction>()
var demand = ArrayList<transaction>()
sales Orders数组,由以下人员创建:
val formatter: DateTimeFormatter
get() = DateTimeFormatter.ofPattern("dd.mm.yyyy", Locale.ENGLISH)

salesOrders.add(transaction(LocalDate.parse("01.02.2018", formatter), 100.0))
salesOrders.add(transaction(LocalDate.parse("01.02.2018", formatter), 80.0))
salesOrders.add(transaction(LocalDate.parse("02.02.2018", formatter), 120.0))
salesOrders.add(transaction(LocalDate.parse("02.02.2018", formatter), 90.0))

如图所示,我们可能在同一天需要多个销售订单,我需要将每天所需数量的总和放入 demand数组,它将显示每天,以及销售订单数量的总数,为此,我使用了 day stamp作为引用 Considering a day is of: 24 hrs * 60 min/hour * 60,000 millisecond/min = 86,400,000 millisecond并使用以下代码:
for (i in 1519862400000..1519862400000 step 86400000){

var calendar: Calendar = Calendar.getInstance()

calendar.setTimeInMillis(i);

val mYear: Int = calendar.get(Calendar.YEAR)

val mMonth: Int = calendar.get(Calendar.MONTH)

val mDay: Int = calendar.get(Calendar.DAY_OF_MONTH)

val acc = salesOrders.filter { it.day_stamp == i }.
fold (0.0) {s, els -> s.plus(els.quantity) }

demand.add(transaction(LocalDate.of(mDay, mMonth, mYear),acc))
}

我觉得这个循环会消耗比需要更多的时间,有没有更好的做法/方法来做到这一点,有更好的代码吗?谢谢。

最佳答案

以下将满足您的需要:

val demand = salesOrders.groupingBy { it.date }.fold(0.0) { sum: Double, t: transaction ->
sum + t.quantity
}.map { transaction(it.key, it.value) }

输入 salesOrders将在汇总所有数量并再次映射到新的 transaction 之前按日期分组实例。

请注意您的格式化程序未按预期工作:更改为 "dd.MM.yyyy" .

关于kotlin - 我几天的循环很长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213813/

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