Java 在scala中对自定义类arraybuffer排序并获取子集
我有一个自定义对象Employee的arraybuffer,它有empname、empno、joiningdate 我想在joiningdate对ArrayBuffer进行排序,并获得前10名 我就是这样做的,但我认为可以有更好的替代方案或优化解决方案 无法在db查询中执行相同的操作,因为我使用的是cassandra db,其中无法对非集群列执行相同的操作Java 在scala中对自定义类arraybuffer排序并获取子集,java,scala,sorting,java-stream,Java,Scala,Sorting,Java Stream,我有一个自定义对象Employee的arraybuffer,它有empname、empno、joiningdate 我想在joiningdate对ArrayBuffer进行排序,并获得前10名 我就是这样做的,但我认为可以有更好的替代方案或优化解决方案 无法在db查询中执行相同的操作,因为我使用的是cassandra db,其中无法对非集群列执行相同的操作 val employeeList: mutable.Buffer[Employee]// getting from db val empl
val employeeList: mutable.Buffer[Employee]// getting from db
val employeeMap = employeeList.groupBy((p: Employee) => p.joiningdate)
val employeeDescSortedMap = new mutable.TreeMap[java.util.Date,
mutable.Buffer[Employee]]()(Ordering.ordered[java.util.Date].reverse)
val limitedSizeEmployeeMap = new mutable.TreeMap[java.util.Date, mutable.Buffer[Employee]]()
var count: Long = 10
employeeDescSortedMap ++= employeeMap
employeeDescSortedMap.foreach(employee => {
if (count > 0) {
limitedSizeEmployeeMap += employee
count -= 1
}
})
limitedSizeEmployeeMap
如果您在Scaladoc中查找名为
sort
的方法,您会发现。唯一的问题是如何使用它进行降序排序。您可以反转默认的顺序
:
val sorted = employeeList.sortBy(_.joiningdate)(Ordering[WhateverTheTypeOfJoiningDateIs].reverse)
sorted.take(10)
或者只需按升序排序并获取最后的元素:
val sorted = employeeList.sortBy(_.joiningdate)
sorted.takeRight(10).reverse
<>使用你认为更清楚的任何一个。< /P>
注意sortBy
没有进行适当的排序(根据Scala 2.13应该为其添加方法,但我在中没有看到它们)。因此,将排列到阵列中并将其排序到位将更快
还有一些top-N算法不需要对整个序列进行排序,但据我所知,它们在Scala或Java标准库中不可用。您可以使用或查看其他选项