0

我有一个名为 的类Sample,这个类有一个属性是 an ArrayList<Area>,并且 anArea包含一个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;
    ...
}

我需要getMergedData()fromSample类合并每个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"

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

4

1 回答 1

0

如果列表的元素顺序相同,例如它们的K元素是第一个元素,它们的C元素是第二个元素等等,那么只需进行逐个元素的比较。否则,您可以按元素名称对它们进行排序,然后逐个元素进行比较(如果您使用良好的排序算法,这是 nlog(n) ),或者将所有内容放在以元素名称为键的 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);
}
于 2013-04-17T21:49:45.737 回答