gpt4 book ai didi

java - Gson按值对TreeMap的ArrayList进行排序

转载 作者:行者123 更新时间:2023-12-02 00:58:39 24 4
gpt4 key购买 nike

我有一个来自 Gson 库的 Java 中的 LinkedTreeMap 对象的 ArrayList。每个对象上都有一个键,假设键标记为“code”,每个值都是一个字符串。我想按特定键(“代码”键)按升序对这些 LinkedTreeMap 对象的整体 ArrayList 进行排序(但也很好奇如何以相反的顺序进行排序)。我知道您必须实现 Comparable 接口(interface)才能使其正常工作,我只是不确定如何去做。

最佳答案

在您的示例中实现 Comparable 接口(interface)可能会产生太多开销(您必须为实现 ComparableLinkedTreeMap 引入专用类>) 如果您的类具有自然顺序,并且始终用于对此类的元素进行排序,则另外实现才有意义。

实现比较器更加灵活并且非常容易做到。然后可以使用此类对列表进行排序:

public static void main(String[] args) {
List<Map<String, String>> list = new ArrayList<>(); // get your list from somewhere
list.sort(new MapByCodeComparator());
}

private static class MapByCodeComparator implements Comparator<Map<String, String>> {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
// probably do some error handling here to handle cases where "code" is not present in the map
return o1.get("code").compareTo(o2.get("code"));
}
}

通过使用new MapComparator().reversed(),您可以简单地反转比较器的顺序。

您还可以使用 lambda 来代替成熟的 Comparator 类:

list.sort((o1, o2) -> o1.get("code").compareTo(o2.get("code")));

但是,如果添加错误处理,这会变得很麻烦。而且您不能免费获得反向排序。

关于java - Gson按值对TreeMap的ArrayList进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60992852/

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