2017-01-12 7 views
0

私はデータの3リストを持っていると私は挿入の順序をマージし、維持する必要があり、任意の重複があってはならない、マージリストとデータの順序を維持し、重複なし

For Eg: 
List l1=new LinkedList<>(); 
    l1.add("b"); 
    l1.add("a"); 
    l1.add("o"); 
    List l2=new LinkedList<>(); 
    l2.add("m"); 
    l2.add("n"); 
    List l3=new LinkedList<>(); 
    l3.add("m"); 
    l3.add("n"); 
    l3.add("o"); 
After merging the value should be 
First Merging b a o m n  
Second merging b a m n o 

がないために入力はその順序で変更されません。最初に値が存在し、最初に値が存在する必要があります。最初のレコードは、中央に移動するべきではありません

EDITはOPの追加要件を含めます。ケース3:add( "b");最初に に、レコードは[a、m、b、n、o]を与えるべきですが、 の最初のリスト(l1)にbがあり、b、a、m、n、oでなければなりません。

+2

[リンクされたハッシュセット - 挿入順序と重複 - 最新の "最新の状態に保つ"](http://stackoverflow.com/questions/36399845/linkedhashset-insertion-order-and-duplicates-keep-newest-on- top) – shmosel

+0

'最初に値が存在すれば、それは最初だけでなければなりません.'最後のリストは' baomn'でしょう。 –

答えて

0

これは、あなたが探している結果を取得します。 for/eachはotherの各要素をループし、baseに追加しますが、存在する場合は既存の要素を削除します。この例では文字列プールから引き出されているため、これはあなたの文字列に対して機能します。そうでない場合は、もう少し比較を行う必要があります。

public List<String> merge(List<String> base, List<String> other) { 
    for(String s : other) { 
     if(base.indexOf(s) != 0) 
      base.remove(s); 
     else continue; 
     base.add(s); 
    } 
    return base; 
} 

最初の要素が置き換えられないという追加要件のために編集されています。

+0

上記の例では動作しますが、最初にレコードが真ん中に移動してはならない条件がもう1つあります。ケース3:add( "b");最初にレコードは[a、m、b、n、o]を与えなければならないが、最初のリスト(l1)にbがあり、 であり、b、a、m、n、oでなければならない。 – user3428736

+0

@ user3428736最初の要素が置き換えられないという追加要件のために編集されました。 – drognisep

2
List<String> result = new LinkedList<>(); 
result.addAll(l1); 
result.removeAll(l2); 
result.addAll(l2); 
result.removeAll(l3); 
result.addAll(l3); 
関連する問題