在Java中合并两个Array List

时间:2012-11-02 06:40:20

标签: java collections arraylist

我有两个数据列表说currentTopicsDetailsList和updatedTopicsDetailsList。列表是对象主题(类),即

List<Topic> currentTopicsDetailsList;
List<Topic> updatedTopicsDetailsList; 

类Topic具有属性

  • socialIndex
  • twitterIndex
  • 新闻索引

我想用updatedTopicsDetailsList值更新currentTopicsDetailsList中的值 例如在

  • currentTopicsDetailsList [4] .rank = 158
  • currentTopicsDetailsList [4] .socialIndex = + 245
  • currentTopicsDetailsList [4] .twitterIndex = -345
  • currentTopicsDetailsList [4] .newsIndex = + 340

  • updatedTopicsDetailsLIst [4] .rank =空

  • updatedTopicsDetailsLIst [4] .socialIndex = 300
  • updatedTopicsDetailsLIst [4] .twitterIndex = -56
  • updatedTopicsDetailsLIst [4] .newsIndex = + 340

我想用updatedTopicsDetailsList [4]覆盖currentTopicsDetailsList [4],条件是任何有null的条件都应该被忽略,即,rank属性应该是158,尽管它在updatedTopicsDetailsList中为null [4] .rank

现在正在使用FOR循环索引级别比较null和&amp;空字符串,但有另一种快速的做事方式。

2 个答案:

答案 0 :(得分:3)

只需使用Set / HashSet即可。将列表中的一个转换为Set。并使用addAll方法。

注意确保覆盖equals的{​​{1}}和hashcode方法。

Topic

更新评论

List<Topic> currentTopicsDetailsList;
List<Topic> updatedTopicsDetailsList; 
HashSet<Topic> set = new HashSet<Topic>(currentTopicsDetailsList);
set.addAll(updatedTopicsDetailsList);

updatedTopicsDetailsList = new ArrayList<Topic>(set);

抱歉,我不确定,所有生成 do i have to include all the fields for generating equals() & hascode() ? &amp;的字段equals()因为它取决于您的要求。

例如:

hascode()的字段名称为Topic。由于两个id个实例具有相同的Topic,如果我们假设这两个实例相同,则只需将id放入id&amp; equals()。其余的领域不需要放。

答案 1 :(得分:3)

只需在Topic类中添加一个方法即可更新

public void update(Topic updatedTopic){
   if(updatedTopic.getRank()!=null){
      this.rank = updatedTopic.getRank();
   }
   // similarly u can check others
}

并且要合并到列表,您可以这样做

int size = currentTopicsDetailsList.size();
for(int i=0;i<size;i++) {
  Topic uT = updatedTopicsDetailsLIst.get(i);
  Topic cT = currentTopicsDetailsList.get(i);
  cT.update(uT); 
}

确保两个列表都包含有序的Topic