簡體   English   中英

Java ArrayList合並,沒有基於值的重復項

[英]Java ArrayList merge without duplicates based on a value

我有一個名為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"

我不知道該如何以一種時尚的方式做到這一點。

如果列表的元素具有相同的順序,例如,它們的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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM