gpt4 book ai didi

java - 如何使用Java 8的parallelSort()对 map 列表进行排序

转载 作者:行者123 更新时间:2023-12-02 05:01:52 29 4
gpt4 key购买 nike

我知道如何使用 Comparator 对任何类型的对象进行排序和Collections.sort()但我想知道如何使用 Arrays.parallelSort()对 map 列表进行排序?因为它只能对普通数组进行排序。

这是我使用 Comparator 对其进行排序的代码,

List<Map<String, Integer>> employees = new ArrayList<Map<String, Integer>>() {{
add(new HashMap<String, Integer>() {{put("position",5); put("id2", 9);}});
add(new HashMap<String, Integer>() {{put("position",1); put("id2", 1);}});
add(new HashMap<String, Integer>() {{put("position",2); put("id2", 2);}});
add(new HashMap<String, Integer>() {{put("position",4); put("id2", 5);}});
add(new HashMap<String, Integer>() {{put("position",1); put("id2", 1);}});
add(new HashMap<String, Integer>() {{put("position",4); put("id2", 7);}});
}};

Comparator<Map<String, Integer>> comparator = new Comparator<Map<String, Integer>>() {
@Override
public int compare(Map<String, Integer> o1,Map<String, Integer> o2) {
int nr1 = o1.get("id2");
int nr2 = o2.get("id2");
return Integer.compare(nr2, nr1);
}
};

Collections.sort(employees,comparator);

for (Map<String, Integer> s : employees){
System.out.println(s);
}

Arrays.parallelSort确实有一个名为 parallelSort(T[] a,Comparator<?super T> c) 的方法但我不知道如何正确使用它。

到目前为止我已经尝试过了,

Arrays.parallelSort(new ArrayList<Map<String, Integer>>(employees.size()), comparator);

当然我会得到这个错误,

The method parallelSort(T[], Comparator<? super T>) in the type Arrays is not applicable for the arguments (ArrayList<Map<String,Integer>>, Comparator<Map<String,Integer>>)

我只是好奇这种类型的数据是否可以使用 parallelSort 进行排序?

P.S:我也知道如何使用Java 8 stream().sorted用于排序,但我不想使用它。

编辑:我正在排序 id2按降序排列。

最佳答案

对于您在问题中显示的具体示例,您可以简单地编写:

employees.parallelStream()
.sorted((m1, m2) -> Integer.compare(m2.get("id2"), m1.get("id2")))
.forEachOrdered(System.out::println);

但请注意,它可能会在后台调用 Arrays#parallelSort

关于java - 如何使用Java 8的parallelSort()对 map 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200406/

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