以下是我目前的代码:
private void processData(StringBuffer reportBuffer) {
String tableName = "db2_table_name";
ArrayList<HashMap<String, String>> tableValue = FileData.get(tableName);
String No = "No";
String versionNumber = "VersionNumber";
for (HashMap<String, String> fieldValue : tableValue) {
String No = fieldValue.get(No);
String Version = fieldValue.get(versionNumber);
reportBuffer.append("No is: " + No + " and Version is: " +Version + NL);
}
}
目前的输出是:
No is: 1. and Version is: 1.
No is: 1. and Version is: 2.
No is: 3. and Version is: 1.
No is: 3. and Version is: 2.
No is: 3. and Version is: 3.
我想要做的只是保留每个No的最新版本,同时删除旧版本的元素。所以在我的新ArrayList中,我理想的只想:
No is: 1. and Version is: 2.
No is: 3. and Version is: 3
如果您需要任何澄清,请告诉我们!
谢谢!
答案 0 :(得分:0)
您可以创建一个新的HashMap并为该hashmap中的每个No保存最新版本。 您可以通过在执行for循环时在hashmap中保存每个No和Version来实现这一点。但是,每次保存值之前,都应检查hashmap是否包含当前的No,如果是,则不保存但检查存储的版本是否小于当前版本并替换它。
最后,创建一个循环来绕过散列图并将其与reportBuffer.append()一起使用
答案 1 :(得分:0)
单向性
保持Map<String,Integer> lowestAmongMaps = new HashMap<String,Integer>();
在for循环中,将每个键的最低值添加到此地图中。 基本上,这样的事情
Integer currentLowest = Integer.valueOf(lowestAmongMaps.get(versionNumber));
if(currentLowest == null){
currentLowest = Integer.MAX_VALUE;
}
Integer currentVal = Integer.valueOf(Version).intValue();
if( currentVal.intValue() < currentLowest.intValue()){
lowestAmongMaps.put(versionNumber,currentVal);
}
现在在下一次迭代中删除所有不是最低的键。
所以基本上你有两次迭代
for (HashMap<String, String> fieldValue : tableValue)
答案 2 :(得分:0)
如果它是数据库,最好的方法是修改查询以仅从FileData.get()返回最大版本。但我想它是一个档案。因此,一个简单的解决方案是保留第三个映射来存储报告值。例如
private void processData(StringBuffer reportBuffer) {
String tableName = "db2_table_name";
ArrayList<HashMap<String, String>> tableValue = FileData.get(tableName);
String no = "No";
String versionNumber = "VersionNumber";
Map<String, String> mergedMap = new HashMap<String, String>();
for (HashMap<String, String> fieldValue : tableValue) {
String No = fieldValue.get(no);
String Version = fieldValue.get(versionNumber);
if(mergedMap.containsKey(No)){
Integer previousVersion = Integer.valueOf(mergedMap.get(No));
Integer currentVersion = Integer.valueOf(Version);
if(currentVersion > previousVersion){
mergedMap.put(No, Version);
}
} else {
mergedMap.put(No, Version);
}
}
for(Entry<String, String> entry : mergedMap.entrySet()){
reportBuffer.append("No is: " + entry.getKey() + " and Version is: " + entry.getValue() + NL);
}
}