我有兩個數組列表名稱preBusinessList,的businessList。在業務列表中,我有來自服務器的數據,而preBusinessList是本地數據。在列表中我有ID,計數值Betterly證明如下在java中如何合併兩個不同大小的數組列表並創建一個新的Arraylist?
現在,我想作一個newBusinessList這樣
我怎麼能做到這一點在Java中,請幫幫我要解決這個
我有兩個數組列表名稱preBusinessList,的businessList。在業務列表中,我有來自服務器的數據,而preBusinessList是本地數據。在列表中我有ID,計數值Betterly證明如下在java中如何合併兩個不同大小的數組列表並創建一個新的Arraylist?
現在,我想作一個newBusinessList這樣
我怎麼能做到這一點在Java中,請幫幫我要解決這個
assumming我理解正確的話您的問題(如大...):
另外,我假設在列表中的每個元素是一對 - 因爲它從你的數據(只是一個愚蠢的包裝類看起來是擁有2個整數)。如果它的某個其他類需要調整此代碼。
private Map<Integer,Integer> finalValues = new HashMap<Integer,Integer>();
for (Pair<Integer,Integer> entry : preBusinessList) {
finalValues.put(entry.getFirst(), entry.getSecond());
}
//2nd list overwrites values from 1st (anything not overwritten remains)
for (Pair<Integer,Integer> entry : businessList) {
finalValues.put(entry.getFirst(), entry.getSecond());
}
ArrayList<Pair<Integer,Integer>> finalList = new ArrayList<>();
for (Map.Entry<Integer,Integer> entry : finalValues) {
finalList.add(new Pair(entry.getKey(), entry.getValue());
}
//and now sort the list
Collections.sort(finalList, new Comparator<Pair<Integer,Integer>> {
int compare(Pair<Integer,Integer> a, Pair<Integer,Integer>b) {
return a.getFirst.compareTo(b.getFirst()); //compare by 1st number in pair only
}
});
什麼是entry.getFirst()和getSecond? – 2013-05-04 08:48:09
@ user900779擁有2個整數的類的getter方法。即時通訊假設你在你的列表中使用類似的東西,因爲你的列表中的每個條目都有2個值 - 所以它絕對不是一個簡單的對象點亮 – radai 2013-05-04 09:12:38
我正在使用這個類,它只有兩個變量。 public class PlaceItems {public final static String BUSINESS_ID =「id」; public final static String BUSINESS_RESULT =「count」; public String businessId,businessResult; } – 2013-05-04 09:21:10
您可以使用:
Collections.sort(new ArrayList<...>(preBusinessList).addAll(businessList), comparator)
哪裏比較是實現比較接口的類(如你所願將負責整理)
可否請你給我比較的執行情況。 – 2013-05-04 08:35:22
但他想從的businessList項目「覆蓋」那些來自preBusinessList – radai 2013-05-04 08:35:40
@ user900779請告訴我什麼的ArrayList的類型(是一個字符串?) – 2013-05-04 08:36:59
然後我會用一個地圖使用ID爲重點,以執行合併,並將其轉換回你的列表( ID,值)對
我同意你的觀點,下面的解決方案不會刪除重複項。 – 2013-05-04 08:42:16
可否請你給我一些示例代碼,因爲我真的被困在我的最後。 – 2013-05-04 08:43:27
@ user900779 - 像我的答案,我認爲 – radai 2013-05-04 08:45:33
僞代碼:
遍歷preBusinessList。
取鑰匙,看看這個鍵(1,2,3,4,5,6)中的businessList
存在如果是conitnue
否則如果沒有,然後將其添加到的businessList
for(Map.Entry<Integer, Integer> keyValue : preBusinessList.entrySet()) {
if(!businesslist.containsKey(keyValue.getKey())) {
businesslist.put(keyValue.getKey(), keyValue.getValue());
}
}
回答更新按照新的要求
boolean ifExists = false;
for(PlaceItems itemPreBusinessList : preBusinessList) {
ifExists = false;
for(PlaceItems itemBusinessList : businessList) {
if(itemBusinessList.businessId == itemPreBusinessList.businessId) {
// Already exists
ifExists = true;
break;
}
}
if(!isExists) {
businessList.add(itemPreBusinessList);
}
}
嗨Anirudh,我有一個類Arraylist項目名稱
public class PlaceItems {public final static String BUSINESS_ID =「id」; public final static String BUSINESS_RESULT =「count」; public String businessId,businessResult; } – 2013-05-04 08:55:58
你能建議我應該寫什麼來代替Mao.Entry
假設是這樣的:
public class Info {
public int id;
public int info;
}
你可以將它們合併想在保持較高info
視野中的一個如下的基礎上:
// Assumes:
// - that the ArrayLists are sorted to have id in order going up
// - no repeated ids in a or in b (but same id can be in both a and b)
ArrayList<Info> merge(ArrayList<Info> a, ArrayList<Info> b) {
int aLength = a.size();
int bLength = b.size();
int ai = 0;
int bi = 0;
ArrayList<Info> result = new ArrayList<Info>();
while ((ai < aLength) && (bi < bLength))
Info aInfo = a.get(ai);
Info bInfo = b.get(bi);
if (aInfo.id == bInfo.id) {
if (aInfo.info >= bInfo.info) result.add(aInfo);
else result.add(bInfo);
ai++;
bi++;
}
else if (aInfo.id < bInfo.id) {
result.add(aInfo);
ai++;
}
else {
result.add(bInfo);
bi++;
}
}
// Add the remaining terms - only one of the loops will actually do anything
for (; ai<aiLength; ai++) {
result.add(a.get(ai));
}
for (; bi<biLength; bi++) {
result.add(b.get(bi));
}
}
問題不清楚。你想從服務器中取數嗎?或者兩者的總和? – Thilo 2013-05-04 08:31:44
我想,當我沒有數據的businessList比preBusinessList取數據僅合併這兩個名單的基礎上。 – 2013-05-04 08:32:49
你想要做什麼標準合併?在列表索引?價值?從你的例子來看,似乎沒有這些。所以你可以澄清合併標準。基於ID和索引的 – Sebastien 2013-05-04 08:36:08