对HashMap进行排序,定义限制并转换为ArrayList

时间:2018-06-28 00:02:05

标签: java performance arraylist collections hashmap

我有一个像这样的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非常庞大,因此代码需要太多时间才能完成。 知道如何处理场景吗?

欢迎任何帮助。谢谢!

1 个答案:

答案 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());

我将声明和初始化分为两行,以使其占用的空间略少。