我有两个数据列表说currentTopicsDetailsList和updatedTopicsDetailsList。列表是对象主题(类),即
List<Topic> currentTopicsDetailsList;
List<Topic> updatedTopicsDetailsList;
类Topic具有属性
我想用updatedTopicsDetailsList值更新currentTopicsDetailsList中的值 例如在
currentTopicsDetailsList [4] .newsIndex = + 340
updatedTopicsDetailsLIst [4] .rank =空
我想用updatedTopicsDetailsList [4]覆盖currentTopicsDetailsList [4],条件是任何有null的条件都应该被忽略,即,rank属性应该是158,尽管它在updatedTopicsDetailsList中为null [4] .rank
现在正在使用FOR循环索引级别比较null和&amp;空字符串,但有另一种快速的做事方式。
答案 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