0

というクラス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;
    ...
}

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要素が 2 番目など)、要素ごとの比較を行います。それ以外の場合は、それらを要素名で並べ替えてから、要素ごとの比較を行うことができます (適切な並べ替えアルゴリズムを使用する場合、これは 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 に答える