2012-05-04 8 views
0

私はarrayListのarrayListを持っています。各内部arraylistは、形式(name.version)を持ついくつかのオブジェクトを含んでいます。例A.1についてはリストのリストからリストを削除し、リストを保持

{ {a.1,b.2,c.3} , {a.2,d.1,e.1} , {b.3,f.1,z.1}....} 

は名前= Aを意味し、バージョンは1

は、だから私は、リストのこのArrayListの中に重複を解消したいです。私にとっては、2つのオブジェクトは、彼らが同じ名前

を持っているときに、基本的に私の出力は、私はまったく同じ形式で出力したい

{ { a.1,b.2,c.3},{d.1,e.1} ,{f.1 ,z.1} } 

注意(つまりする必要があり、重複している、私は単一をたくありませんリストは重複なし)

誰かが私にこのための最適なソリューションを提供できますか?

それぞれの内部リストをループし、その内容をハッシュセットに配置できます。しかし、そこに2つの問題は、私は傾ける のリストのリストの形で答えを得ることができません。別の問題は、私はそのオブジェクトのequalsをオーバーライドする必要がありますが、もしそれが 他のコードを破る。それらの名前が同じである場合、これらのオブジェクトは

おかげ

+0

これは –

+0

そのない宿題は、あなたが言うなら、我々は – Barry

+0

を持っている本当の問題をproblem.Its宿題ではないと言ってそれにタグを付けたり、ポストを編集してください、宿題のように見えますa2の前にa2が来るように意図されていますか? – Krrose27

答えて

2
List<List<Pair>> inputs; // in whatever format you have them 
List<List<Pair>> uniqued = new ArrayList<>(); // output to here 
Set<String> seen = new HashSet<String>(); 
for (List<Pair> list : inputs) { 
    List<Pair> output = new ArrayList<>(); 
    for (Pair p : list) 
    if (seen.add(p.getName())) 
     output.add(p); 
    uniqued.add(output); 
} 
1

はセットを作成します(この場合のみ。私はそれが スペクトル全体をカバーすることを確認していない)有意義に等しいです。リストの項目のリストを繰り返します。アイテムがセット内にあるかどうかを確認します。すでに存在する場合は無視してください。そうでない場合は、セットとリストのリストに追加します。

あなたのメソッドは新しいリストのリストを返します。古いリストは変更しません。リストの反復処理中にリストを変更することは苦痛です。

3

Iterator.remove()を使用して、コレクションを移動するときにコレクションを変更しました。

// build your example input as ArrayList<ArrayList<String>> 
String[][] tmp = { { "a.1", "b.2", "c.3" }, { "a.2", "d.1", "e.1" }, 
     { "b.3", "f.1", "z.1" } }; 
List<List<String>> test = new ArrayList<List<String>>(); 
for (String[] array : tmp) { 
    test.add(new ArrayList<String>(Arrays.asList(array))); 
} 

// keep track of elements we've already seen 
Set<String> nameCache = new HashSet<String>(); 

// iterate and remove if seen before 
for (List<String> list : test) { 
    for (Iterator<String> it = list.iterator(); it.hasNext();) { 
     String element = it.next(); 
     String name = element.split("\\.")[0]; 
     if (nameCache.contains(name)) { 
      it.remove(); 
     } else { 
      nameCache.add(name); 
     } 
    } 
} 
System.out.println(test); 

出力

[[a.1, b.2, c.3], [d.1, e.1], [f.1, z.1]]