1

currentTopicsDetailsList と updatedTopicsDetailsList という 2 つの配列リストがあります。リストはオブジェクトのトピック(クラス)です。つまり、

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

クラス Topic にはプロパティがあります

  • ランク
  • ソーシャルインデックス
  • twitterIndex
  • ニュースインデックス


currentTopicsDetailsList の値を updatedTopicsDetailsList の値で更新したい

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

  • updatedTopicsDetailsLIst[4].rank=null

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

currentTopicsDetailsList[4] を updatedTopicsDetailsList[4] で上書きしたいのですが、null を持つものは無視する必要があります。つまり、updatedTopicsDetailsList[4].rank に null があっても、rank プロパティは 158 にする必要があります。

現在、NULL と空の文字列の FOR ループ インデックス レベルの比較でそれを行っていますが、代替の迅速な方法はありますか。

4

2 に答える 2

3

Set/を使用するだけHashSetです。リストの 1 つを に変換し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ます。2 つのTopicインスタンスが同じであるため、これら 2 つのインスタンスが同じであると仮定すると、&idに入れるだけで済みます。残りのフィールドは入力する必要はありません。idequals()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 に答える