2016-10-19 7 views
1

完全な初心者ですので、私の質問が愚かであればお詫び申し上げます。私は正直に投稿する前に試みた。 私はいくつかの顧客のリストを持っています。顧客のIDは1つの列と顧客名、もう1つは顧客名、3番目の列は年齢です。お客様のリストに重複した顧客IDを確認してください

私はこのリストを見て、同じcustomerIdが複数回リストに入っているかどうかを確認したいと思います。その場合、私はその顧客全体を削除する必要があります(彼の名前または年齢が異なっていても)。

このロジックを行うために何を使用するようお勧めできますか?

セットには(重複を追加しないため)顧客を追加しようとしましたが、このリストに重複していない顧客IDであることをどのように記述しますか?

これまでのところ私はこれを得ましたが、私のロジックでは、顧客IDが重複していると重複しているとは言いません。 (必ずしもリストを使用する必要はありません。顧客はオブジェクトです)。あなたは、このためのHapMapを使用することができます

//Customer is a class that contains a private variable customerId, so I can do customer.getCustomerId(); 

    List<Customer> notDuplicatedCustomers = new ArrayList<Customer>(); //list of customers 
    final Set<Customer> setToReturn = new HashSet<Customer>(); 
    final Set<Customer> initialSet = new HashSet<Customer>(); 

    for (Customer customer: notDuplicatedCustomers) { 
    if (!initialSet.add(customer)) { 
    setToReturn.add(customer); 
     } 
    } 
+0

「HashMap 」を使用してください –

+0

この投稿はあなたに便利です[重複を削除](http://stackoverflow.com/questions/20433692/java-remove-duplicate-objects-in-arraylist) –

答えて

0

List<Customer> lstCustomer = new ArrayList<Customer>(); // list of customer 
Map<Integer,Customer> map = new HashMap<Integer, Customer>(); //here integer is your id type 

for(int i=0;i<lstCustomer .size();i++){ 
    if(map.get(lstCustomer .get(i).getId())==null){ 
     map.put(lstCustomer .get(i).getId(),lst.get(i)); 
    }else{ 
     System.out.println(lstCustomer .get(i).getId()); // duplicate customer id 
    } 
} 

は、それはあなたのお役に立てば幸いです。

+0

は1000%の可読性を向上させますが、foreach構文を使用すると –

+0

が合意されました。foreachも使用できます。 thnx – PSabuwala

+0

'lst'とは何ですか?あなたは 'lstCustomer'を意味しますか? –

1

(セットは重複を追加しないので)私がセットに顧客を追加しようとしたが、どのように私はそれがこのリストに複製することができないはcustomerId、ない顧客、であると述べているのですか?

あなたは、それによって彼らは同じIDを持っている場合、2人の顧客が論理的に同等であることをセットに伝える、IDフィールドに基づいてequals()メソッドをオーバーライドする場合、これは可能です。ここで(idはタイプStringであると仮定すると、タイプは、いくつかのプリミティブ型はそのラッパーを使用する場合)私のIDEによって生成された実装例です:

@Override 
public boolean equals(final Object obj) { 
    if (this == obj) { 
     return true; 
    } 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    final Student other = (Student) obj; 
    if (id == null) { 
     if (other.id!= null) { 
      return false; 
     } 
    } else if (!id.equals(other.id)) { 
     return false; 
    } 
    return true; 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = (prime * result) + ((id == null) ? 0 : id.hashCode()); 
    return result; 
} 

final Set<Customer> myCustomerSet = new HashSet<Customer>(); 
myCustomerSet.add(customer1); 
... 

あなたがセットに顧客を追加するとき、あなたは唯一つのエントリを持つ必要がありますセット内の同じIDで。 hashCode()はあなたのケースでは必要ありませんが、通常はequals()を上書きする場合は、hashCode()も上書きする必要があります。

0

カスタムコンパレータを入力パラメータとして使用してTreeSetを作成します。コンパレータ内の は、等価ロジックを書きます。 各顧客をツリーセットに追加します。最後のツリーセットには重複はありません。

関連する問題