比较HashMaps的ArrayList,确定哪一行具有特定键的最大值



这很难解释,但我会尽我所能。

我在excel中有一个数据文件,其中每一行都是一个单独的条目。数据文件跟踪一个条目的所有版本,因此单个唯一项有多个行,也可以有多个项。下面是数据集的示例:

第一个值(苹果、梨、葡萄)是我想要分组的唯一值,最后一个值是版本号,我只想要最新的版本号(最高的版本号)。

row1 apples,computer,1
row2 apples,laptop,2
row3 apples,tablet,3
row4 pear,tablet,1
row5 pear,tablet,2
row6 grape,tablet,1

我正在寻找的是以下内容:我已经采取了每个组的最新版本(基于唯一标识符-第一个字段)

row1 apples,tablet,3
row2 pear,tablet,2
row3 grape,tablet,1

现在我有一个方法来读取excel文件,并将每一行数据放在一个数组列表(ArrayList<HashMap<String,String>>)条目中,该条目有一个hashmap来映射字段名称(列标题)和值。所有字段都是String。

row1(fieldName1:apples,fieldName2:computer,fieldName3:1)
row2(fieldName1:apples,fieldName2:laptop,fieldName3:2)
row3(fieldName1:apples,fieldName2:tablet,fieldName3:3)
row1(fieldName1:pear,fieldName2:computer,fieldName3:1)
row2(fieldName1:pear,fieldName2:laptop,fieldName3:2)
row3(fieldName1:grape,fieldName2:tablet,fieldName3:1)

fieldName1将是唯一标识符,fieldName3将是版本号对我该怎么做有什么想法吗?如果你需要任何澄清,请告诉我!

Thanks in advance

只需修改列和比较器,以便按照您想要的方式进行比较。如果您从Map切换到合适的类,那么您需要做的就是调整比较器。请注意,在这种情况下,如果列不包含长。

Long.valueOf可能会抛出异常。
final String column = "foo";
Map<String, String> max = Collections.min(table, new Comparator<Map<String, String>>() {
    @Override
    public int compare(Map<String, String> o1, Map<String, String> o2) {
        long l1 = Long.valueOf(o1.get(column).trim());
        long l2 = Long.valueOf(o2.get(column).trim());
        return Long.compare(l1, l2);
    }
});

最新更新