这很难解释,但我会尽力而为。
我在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(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将是版本号 关于如何做到这一点的任何想法或想法?如果您需要任何澄清,请告诉我们!
提前致谢
答案 0 :(得分:0)
只需修改列和比较器,就可以按照您要查找的方式进行比较。如果你再次从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);
}
});