java - 递归聚合键控列表对中的重复项

标签 java arraylist

我有两个列表,匹配索引处的列表之间的项目是链接的。第一个列表提供绑定(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/

相关文章:

java - 如何将 Hashmap 转换为 String 以保存在 SQLite 数据库中?

Java判断arraylist是否包含字符串

java - Android ArrayList,意外停止

java - 减小 JTable 单元格中自定义渲染组件的大小

java - Java中的自动内存泄漏检测

java - 制作列表的子列表,该子列表位于对象存储的列表中

java - 比较列表时迭代 Illegalstate 异常

android - 从 JSONArray 转换为 ArrayList<CustomObject> - Android

java - 如何读取lucene 5.5.5索引?

java - 如何替换子串的每个索引