[英]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.