gpt4 book ai didi

java - 订购一个包含字符串的映射,但字符串可能代表一个数字

转载 作者:行者123 更新时间:2023-11-29 06:48:48 26 4
gpt4 key购买 nike

我在 Map 中有这种值:

Map<Integer, String> map = new HashMap<Integer, String>();                  
map.put(1,"mark");
map.put(2,"1.1");
map.put(3,"google");
map.put(4,"12");
map.put(5,"2.2);

我需要对这个 Map 进行排序,同时对数字和字符串进行排序。

我现在得到的是这个(你可以看到数字不是“有序的”,因为是字符串)

1.1
12
2.2
google
mark

我应该得到的是:

1.1
2.2
12
google
mark

我该怎么做?我有点困惑。

最佳答案

您不能按条目值订购 MapSortedMap 例如TreeMap 允许按键排序条目。您似乎使用了错误的数据结构。

在您的示例中,您可以定义一个函数,该函数将宽松地解析 double 并返回 Double.NaN 而不是异常:

private double lenientParseDouble(String s) {
try {
return Double.parseDouble(s);
} catch (NumberFormatException ex) {
return Double.NaN;
}
}

根据 Double.compare() 文档:

Double.NaN is considered by this method to be equal to itself and greater than all other double values (including Double.POSITIVE_INFINITY).

然后将其用作Comparator链的一部分

map.values().stream()
.sorted(Comparator.comparingDouble(this::lenientParseDouble).thenComparing(Function.identity()))
.forEach(System.out::println);

关于java - 订购一个包含字符串的映射,但字符串可能代表一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56345203/

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