我有一个像这样的HashMap:
public final Map<String, MyClass> myMap = new HashMap<>();
现在我需要对该哈希图进行排序,定义时限并转换为ArrayList。我做了下面的代码:
List<MyClass> collect = myMap.values().stream().sorted((m1, m2) -> Double.compare(m2.getSomething(), m1.getSomething())).limit(amount).collect(Collectors.toList());
问题在于此代码性能不高。 myMap非常庞大,因此代码需要太多时间才能完成。 知道如何处理场景吗?
欢迎任何帮助。谢谢!
答案 0 :(得分:2)
如果您的Map
确实和您说的一样大,则有可能从并行流而不是顺序流中受益。另外,假设MyClass#getSomething
返回double
,则可以使用Comparator#comparingDouble
:
List<MyClass> collect;
collect = myMap.values()
.parallelStream()
.sorted(Comparator.comparingDouble(MyClass::getSomething).reversed())
.limit(amount)
.collect(Collectors.toList());
我将声明和初始化分为两行,以使其占用的空间略少。