2016-09-29 12 views
-2

私はオブジェクトのリストを持っていますが、異なるオブジェクトの複数の複製がある可能性がありますので、私の目標はリストを反復して同じオブジェクトを別のリストに格納することです。どのようにそれを達成するための任意のアイデア。リスト内の同じオブジェクトのリストを個別に作成

入力リスト

[1,3,3,1,4]

私は

[1,1]

を達成したい何

[ 3,3]

[4]

+0

order iterate {old valが違う場合は新しい配列を作成し、古い配列を配列の配列に入れます} ...最後に[1,3,3,1,4] => [[1 、1]、[3,3]、[4]] ...どこに問題がありますか?基本的なプログラミングのエクササイズのように見える – Selvin

+0

同じオブジェクト、本当に同じオブジェクトまたは同じクラスの別のオブジェクトを意味しますか?実際に同じオブジェクトであれば、リストにそのオブジェクトが既に含まれているかどうかをチェックし、そのオブジェクトがまだリストにない場合にのみリストに追加することができます。また、リストごとに1つのポイントを指す参照の複数のリストを持つという点は見当たりません。 – kevto

答えて

1

おそらく、新しいストリームAPIでこれを行うことができます。しかし、私はまだそれに精通していない。私があなただったら、私はこれを行うだろう:

int[] list = {1, 3, 3, 1, 4}; 
HashMap<Integer, ArrayList<Integer>> listsMap = new HashMap<>(); 
for (int i: list) { 
    if (!listsMap.containsKey(i)) { 
     listsMap.put(i, new ArrayList<>()); 
     listsMap.get(i).add(i); 
    } else { 
     listsMap.get(i).add(i); 
    } 
} 
System.out.println(listsMap); 

説明:

まず、我々はリスト(2行目)を格納するマップを作成します。これは、配列をループするときに項目を追加するための正しいリストを見つけるために使用されます。

ここで、配列をループします(3行目)。私たちは以前にそのアイテムに遭遇したかどうかを確認します(4行目)。そうでない場合は、現在の項目をキーとして新しいArrayListをマップに追加します(5行目)。次に、項目を新しく作成した配列に入れます(6行目)。以前にアイテムが見つかった場合は、そのアイテムのキーを使用してアイテムを配列に追加します(8行目)。

関連する問題