質問What should i do to solve this ?
回答: Java のコレクション フレームワークに関するチュートリアルを見つけて読んでください。
異なるタイプのオブジェクトを 1 つのリストに格納する場合は、任意のオブジェクトを受け入れることができるリストを作成する必要があります。Object
Java のすべてのオブジェクトは、クラスから継承されます 。したがって、次のようなものを作成する必要があります。
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フレームワークを拡張する、すでに作成されたフレームワークを使用することです. オプションは、iterablesとapache commonsを含む guava です。