我有一个名为Sample的类,该类的属性是ArrayList<Area> ,而Area包含ArrayList<Elements>

public class Sample {
    private ArrayList<Area> sampleAreas;
    public ArrayList<Element> getMergedData()
    {
        ...
    }
    ...
}

public class Area {
    private ArrayList<Element> areaElements
    ...
}

public class Element {
    private String name;
    private Float value;
    ...
}

我需要Sample类的getMergedData()合并每个区域中的每个ArrayList<Elements> ,以使元素具有更大的值。

例如:

Area 1: ("Element K" => 1.0, "Element C" => 0.5, "Element AS" => 15.0)

Area 2: ("Element K" => 10.1, "Element C" => 5.5, "Element AS" => 2.9, "Element O" => 1.5)

Area 3: ("Element C" => 2.8, "Element AS" => 0.5, "Element O" => 5.8)

Area 4: ("Element K" => 3.25, "Element AS" => 2.5, "Element O" => 0.1)

因此,该方法必须返回如下内容:( ("Element K" => 10.1, "Element C" => 5.5, "Element AS" => 15.0, "Element O" => 5.8"

我不知道该如何以一种时尚的方式做到这一点。

===============>>#1 票数:0 已采纳

如果列表的元素具有相同的顺序,例如,它们的K元素排在第一位,其C元素排在第二位,依此类推,那么只需进行逐个元素的比较即可。 否则,您可以按元素名称对它们进行排序,然后进行逐元素比较(如果使用良好的排序算法,则为nlog(n)),或者将所有内容都放在元素名称为key的HashMap中,以价值为价值。

HashMap map = new HashMap();
for(int i = 0; i < list1.size(); i++) {
    Element e = list1.get(i);
    map.put(e.name, e.value);
}
for(int i = 0; i < list2.size(); i++) {
    Element e = list2.get(i);
    if(map.get(e.name) < e.value)
        map.put(e.name, e.value);
}

  ask by Andreo Vieira translate from so

未解决问题?本站智能推荐: