0
private ArrayList<SublistLocalData> catList;

private ArrayList<Localdata> nameList ,nameList1;

両方とも異なるデータを持っています:

for(SublistLocalData  list: catList )
nameList1.addAll( list.nameList );

あるタイプのarrayListデータを別のタイプのArrayListに追加するためにこの概念を試しています。このリンクをたどります:

リンク

これを解決するにはどうすればよいですか?

4

2 に答える 2

5

質問What should i do to solve this ?

回答: Java のコレクション フレームワークに関するチュートリアルを見つけて読んでください。

異なるタイプのオブジェクトを 1 つのリストに格納する場合は、任意のオブジェクトを受け入れることができるリストを作成する必要があります。ObjectJava のすべてのオブジェクトは、クラスから継承されます 。したがって、次のようなものを作成する必要があります。

private List<Object> list4Everything = new ArrayList<>();

編集:

ただし、同じオブジェクトがあり、既存の2つのリストを新しい単一のリストにマージしたいだけの場合。メソッドList#addAll(Collection c)を使用する必要があります

例でそれをしないように、3 つのリストがあります。

private List<YourType> list1 = new ArrayList<>();
private List<YourType> list2 = new ArrayList<>();
private List<YourType> mergeResult = new ArrayList<>();

list1「list2」からすべてのデータを挿入するさまざまなオプションがありますmergeResult

オプション 1 - megeResult の addAll を使用します。

mergeResult.addAll(list1);
mergeResult.addAll(list2);

オプション 2 - 手動で行います。

for(YourType yt : list1) { //Itereate throug every item from list1
   mergerResult.add(yt); //Add found item to mergerResult
}

for(YourType yt : list1) { //Itereate throug every item from list2
   mergerResult.add(yt); //Add found item to mergerResult
}

注: このソリューションでは、ウィッチ アイテムを選択する可能性がありますmeregeResult

したがって、たとえば、明確な結果が必要な場合は、次のようにすることができます。

for(YourType yt : list1) { //Itereate throug every item from list1
  if(mergerResult.contains(yt) == false) { //We check that item, already exits in mergeResult
     mergerResult.add(yt); //Add found item to mergerResult
  }
}

for(YourType yt : list1) { //Itereate throug every item from list2
  if(mergerResult.contains(yt) == false) { //We check that item, already exits in mergeResult
   mergerResult.add(yt); //Add found item to mergerResult
   }
}

同じ操作を 2 回実行すると、ユーティリティ クラスを作成できます。

public static <T> boolean addAllNotContained(Collection<? super T> traget, Collection<? super T> source) {

   //We should assure first that target or source are not null

   int targetSize = target.size();

   for(T item: source) {
     if(target.contains(item) == false) {
        target.add(item);
     }
   }

   return targetSize != target.size();
}

注: 個別のマージで同様の結果を得るには、 jest Setを使用できます。重複を保存しないように作成されています。

もう1つのオプションは、デフォルトのJavaフレームワークを拡張する、すでに作成されたフレームワークを使用することです. オプションは、iterablesapache commonsを含む guava です。

于 2013-04-19T10:25:32.640 に答える
0

SublistLocalData クラスと Localdata クラスの間に関係がある場合は、それらの両方または 2 つのクラスが実装するインターフェイスのスーパー クラスであるクラスを作成できます。あなたがこのクラスを持っているとしましょう:class AbstractSuperClass {} 次に: ここで superClass のリストを宣言する方法:List<AbstractSuperClass> list; このリストを使用して、任意のタイプの AbstractSuperClass ( SublistLocalData や Localdata のように継承するクラス) を追加できます。次に、次のように記述できます。

list.add(new SublistLocalData());

orlist.add(new Localdata());
于 2013-04-19T10:31:44.007 に答える