java - 使用 Java 按实际顺序将列表值添加到 Treemap

标签 java treemap

我通过以下方式获得了 map 对象列表

List<Map<String, Object>> insurancePercentageDetails = dao.getinusrancePercentageDetails(age);

这给了我以下方式的输出。

[{Age=42, Rate12=0.40, Rate24=0.63, Rate36=0.86, Rate48=1.12, Rate60=1.39, Rate72=1.67, Rate84=1.98, Rate96=2.31, Rate108=3.30, Rate120=3.84, Rate132=4.40, Rate144=5.00, Rate156=5.62, Rate168=6.28, Rate180=6.97, Rate192=7.34, Rate204=7.74, Rate216=8.15, Rate228=8.07, Rate240=8.33}]

我的实际目标是按以下排序顺序绘制 map

{12=0.4,24=0.63 ....}

为此我采用了静态列表

private final static List<String> period = new ArrayList<>
                    (Arrays.asList("Rate12","Rate24","Rate36","Rate48","Rate60","Rate72","Rate84","Rate96","Rate108","Rate120",
                            "Rate132","Rate144","Rate156","Rate168","Rate180","Rate192","Rate204","Rate216","Rate228","Rate240"));

然后

    TreeMap<String, Float> insuranceMatrixMap = new TreeMap<String, Float>();


for(String str : period) {  
            insuranceMatrixMap.put(str.replaceAll("Rate", ""), ((BigDecimal) (BBUtil.getInstance().getValue(insurancePercentageDetails, str))).floatValue());
        }

这给了我输出

{108=3.3, 12=0.4, 120=3.84, 132=4.4, 144=5.0, 156=5.62, 168=6.28, 180=6.97, 192=7.34, 204=7.74, 216=8.15, 228=8.07, 24=0.63, 240=8.33, 36=0.86, 48=1.12, 60=1.39, 72=1.67, 84=1.98, 96=2.31}

未按排序顺序。

TreeMap 应该按排序顺序保留键,不是吗?

我在这里遗漏了什么吗?

最佳答案

你是对的,TreeMap 将根据键进行排序。 但在你的情况下,键是字符串而不是整数。

结果根据字符串值排序,即 "108".compareTo("12") 将为负数。

字符串比较基于每个字符的 Unicode 值。 您必须使用TreeMap<Integer, Float>如果你想对整数值进行排序。

关于java - 使用 Java 按实际顺序将列表值添加到 Treemap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47493269/

相关文章:

algorithm - 具有多个键和范围搜索支持的 TreeMap

java - TreeMap 对于某些键不起作用

java - 系统变量和用户变量如何工作

java - 如何使用 JJWT 从有效负载中获取自定义字段

r - 如何在同一页面上绘制网格图?

java - 如何从头到尾遍历 TreeMap<Integer, T>

java - 有两个键的 TreeMap

java - LocationService.FusedLocation 仅在某些设备上返回 null

用于在 Linux 中创建图形和图表的 Java 编程实用程序

java - 在java中输出文本文件的CaesarCipher程序