我有两个列表,匹配索引处的列表之间的项目是链接的。第一个列表提供绑定(bind)到第二个列表值的键:
List<Double> a1 = [10,20,20,30,10]; // keys
List<Double> y1 = [2012,2013,2012,2012,2013]; // values
我想从键(索引)列表中删除重复项,以便在找到重复项时添加键的值。因此,例如,如果找到两个值为 10 的键,我想用一个值为 20 的键替换这两个键。将重复此过程,直到没有重复的键剩余。所以我想要这样的列表输出:
List<Double> a1 = [60,30];
List<Double> y1 = [2012,2013];
我尝试使用以下代码解决此问题,但输出不正确。
y2=new ArrayList<Double>();
a2 = new ArrayList<Double>();
String y = "";
double a = 0;
for (int i = 0; i < y1.size(); i++) {
if (y1.get(i).equals(y)) {
a = a + y1.get(i);
} else {
if (!y.equals("")) {
y2.add(y);
a2.add(a);
}
y = y1.get(i);
a = a1.get(i);
}
}
y2.add(y);
a2.add(a);
感谢任何帮助,谢谢。
最佳答案
使用 map
Map<Double, Double> map = new HashMap<>();
for (int i = 0; i < y1.size(); i++) {
double oldValue = map.containsKey(y1.get(i)) ? map.get(y1.get(i)) : 0.0;
map.put(y1.get(i), oldValue + a1.get(i));
}
y1.clear();
a1.clear();
for (Entry<Double, Double> entry : map.entrySet()) {
y1.add(entry.getKey());
a1.add(entry.getValue());
}
关于java - 递归聚合键控列表对中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876413/