我几天的循环很长

  • 本文关键字:循环 几天 kotlin
  • 更新时间 :
  • 英文 :


我有以下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"

最新更新