[英]Object not being replaced
我有兩個聯系人列表,我想用一個替換為:
private PhoneCAdapter getContactAdapter(ArrayList<UserAgenda> phoneContacts) throws NetworkConnetionException {
List<UserAgenda> serverContacts = WithingsAPI.getInstance().getContactListByType(Common.CONTACT_LIST_TYPE_FILE,"ALL");
for(UserAgenda pc: phoneContacts){
for(UserAgenda sc : serverContacts){
if(pc.getEmails() != null){
ArrayList<String> emailsPc = new ArrayList<String>(pc.getEmails());
for(String epc: emailsPc){
ArrayList<String> emailList = new ArrayList<String>(sc.getEmails());
String emailServer = emailList.get(0);//server contact has only one email
if(epc.equals(emailServer)){//we have to substitute the object from the server with the phone ones.
pc = sc;
}
}
}
}
}
PhoneCAdapter ca = new PhoneCAdapter(this, 0, phoneContacts,PhoneContacts.this );
return ca;
}
但是在循環之后,我的變量phoneContacts仍然具有相同的值。 僅當我手動將字段更改為:
if(epc.equals(emailServer)){
pc.setUserOfWW(sc.getUserOfWW());
if(sc.getInvited().equals("true")){
pc.setInvited("true");
}
else{
pc.setInvited("false");//here we have people who are/arent user of WW
pc.setId2invite(sc.getId2invite());
}
}
我如何用我從服務器獲得的用戶身份用電話中的信息替換我的對象,而無需手動對每個字段進行操作?
更改用於迭代器的局部變量不會更改集合的內容。 了解修改變量值所引用的對象與修改變量之間的區別非常重要。 如果修改列表中引用所引用的對象,則該更改將通過列表可見。 如果您修改的變量基本上包含該引用的副本 ,則根本不會影響該列表。
我懷疑您想要:
for (int i = 0; i < phoneContacts.size(); i++) {
UserAgenda pc = phoneContacts.get(i);
for (UserAgenda sc : serverContacts) {
if (pc.getEmails() != null) {
ArrayList<String> emailsPc = new ArrayList<String>(pc.getEmails());
for (String epc: emailsPc) {
ArrayList<String> emailList = new ArrayList<String>(sc.getEmails());
String emailServer = emailList.get(0);
if (epc.equals(emailServer)) {
pc = sc;
// Replace the value in the collection too...
phoneContacts.set(i, sc);
// Do you want to break here?
}
}
}
}
}
目前尚不清楚為什么要在循環中創建數組列表(或者為什么要在每次迭代中重新創建相同的電子郵件列表)。 基本上代碼是目前非常不清楚,我強烈懷疑這可以大大簡化-但它是很難做到這一點不知道你想達到的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.