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

use*_*280 1 java arraylist

我有两个列表,其中链接匹配索引的列表之间的项目.第一个列表提供与第二个列表值相关的键:

List<Double> a1 = [10,20,20,30,10];           // keys
List<Double> y1 = [2012,2013,2012,2012,2013]; // values
Run Code Online (Sandbox Code Playgroud)

我想从密钥(索引)列表中删除重复项,以便在找到重复项时,添加密钥的值.因此,例如,如果找到值为10的两个键,我想用一个值为20的单个键替换两个键.将重复此过程,直到没有重复的键为止.所以我希望列表的输出如下:

List<Double> a1 = [60,30];
List<Double> y1 = [2012,2013];
Run Code Online (Sandbox Code Playgroud)

我试图使用以下代码解决此问题,但输出不正确.

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);
Run Code Online (Sandbox Code Playgroud)

任何帮助表示感谢,谢谢.

Vin*_*ele 6

用一个 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());
}
Run Code Online (Sandbox Code Playgroud)