1

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

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

类 Topic 具有属性

  • 社会指数
  • 推特索引
  • 新闻索引

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

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

  • updatedTopicsDetailsLIst[4].rank=null

  • 更新的TopicsDetailsLIst[4].socialIndex= 300
  • updatedTopicsDetailsLIst[4].twitterIndex=-56
  • updatedTopicsDetailsLIst[4].newsIndex=+340

我想用 updatedTopicsDetailsList[4] 覆盖 currentTopicsDetailsList[4] ,条件是无论哪个具有 null 都应该被忽略,即 rank 属性应该是 158,即使它在 updatedTopicsDetailsList[4].rank 中为 null

现在正在对空字符串和空字符串进行 FOR 循环索引级别比较,但是是否有另一种快速的做事方式。

4

2 回答 2

3

只需使用Set/ HashSet。将列表之一转换为Set. 以及使用addAll方法。

注意确保覆盖equalshashcode方法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() ?

抱歉,我不确定,生成equals()&hascode()因为它的所有字段取决于您的要求。

例如 :

Topic有一个字段名称id。由于两个Topic实例相同id,如果我们假设这两个实例相同,则只需id放入equals()& hascode()。其余字段无需填写。

于 2012-11-02T06:47:38.997 回答
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

于 2012-11-02T07:05:34.353 回答