2017-10-15 2 views
0

私がarraylistを持っていると仮定して、私はarraylistに複数の従業員オブジェクトを動的に追加しています。従業員オブジェクトには、ID、名前、電子メールのようなフィールドがあります。私の要件は、私が従業員オブジェクトをarraylistに追加するときです。 arraylistに既に別のオブジェクトが追加されている電子メールを持つオブジェクトが追加されたとします。次に、arraylistに現在のオブジェクトを追加するか、いくつかのエラーメッセージを表示するべきではありません。可能な限り短時間でこのことを達成するためにコレクションモジュールで利用可能なメソッドはありますか?複数の従業員オブジェクトを含むarraylistで重複した電子メールIDを検出する

+1

'ArrayList'は最適なストレージコレクションではありません。私は代わりに 'Map'を使うことができると思います –

+0

私はあなたのコンピュータをオフにして、紙と鉛筆を手に入れて始めてください。 **あなたの問題を解決するために必要なステップ**を言葉で**書きましょう。 Java構文についてはまったく心配しないでください。あなたが手で行う必要がある場合には、問題をどのように解決するかに集中してください。 –

+0

私はこの質問の答えを持っています。しかし、あらかじめ定義されたコレクションクラスのメソッドや何かを使って、この目標を達成するための最短の方法が必要です。私がここに尋ねたのはその理由です。 –

答えて

1
// Use LinkedHashMap to keep insertion order 
Map<String, Employee> employees = new LinkedHashMap<>(); 

// v1: add new employee with unique email 
employees.putIfAbsent(employee.getEmail(), employee); 

// v2: add new employee and show message for duplication email 
if(employees.containsKey(employee.getEmail())) 
    System.out.println("Email " + employee.getEmail() + " duplication"); 
else 
    employees.put(employee.getEmail(), employee); 

// get all employees in order they were added 
List<Employee> res = new ArrayList<>(employees.values()); 
+0

1これは私が探しているものです:) –

1

あなたは、配列リストのすべてのノードをチェックし、あなたの現在の電子メールアドレスが存在するかどうかを確認します。存在する場合はfalseまたはtrueを返し、メッセージを表示します。

+0

親愛なる人...私はあなたがここで指定したのと同じことをしました。しかし、時間がかかりました。限定的な繰り返しでこれを達成するために、いくつかの定義済みのコレクションメソッドまたはJava 8の機能を使用できますか? –

+0

あなたの電子メールをデータベースに入れて、簡単なクエリチェックだけで、存在するかどうかを確認してください。 –

+0

sqlliteはあなたの仕事にとってとても良いデータベースです。設定が非常に簡単で、インストールも不要です。 –

2

私はあなたの質問を正しく持っていれば、emailaddress属性に基づいて従業員オブジェクトの重複を避ける必要があります。 arraylistの代わりにSetを使うことをお勧めします。

これは、equalsとhashcodeをオーバーライドしているセットでどうしますか?

package com.test.testing; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

/** 
* Hello world! 
* 
*/ 
public class App 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello World!"); 

     Employee employee = new Employee("[email protected]", "1"); 
     Employee employee2 = new Employee("[email protected]", "2"); 
     Employee employee3 = new Employee("[email protected]", "3"); 

     List<Employee> empList = new ArrayList<Employee>(); 
     empList.add(employee); 
     empList.add(employee2); 
     empList.add(employee3); 

     System.out.println("Employee List " +empList); 

     Set<Employee> empSet = new HashSet<Employee>(); 

     for (Employee emp : empList) { 

      if (empSet.contains(emp)) { 
       System.out.println("Employee with employee email " +emp.getEmailAddress() + " and employee id " +emp.getId() +" already exists"); 
      } 
      else { 
       empSet.add(emp); 
      } 

     } 

     System.out.println(empSet); 
    } 

    private static class Employee { 

     private String emailAddress; 
     private String id; 


     @Override 
     public String toString() { 
      return "Employee [emailAddress=" + emailAddress + ", id=" + id + "]"; 
     } 

     public Employee(String emailAddress, String id) { 
      this.emailAddress = emailAddress; 
      this.id = id; 
     } 

      public String getEmailAddress() { 
      return emailAddress; 
     } 

     public void setEmailAddress(String emailAddress) { 
      this.emailAddress = emailAddress; 
     } 

     public String getId() { 
      return id; 
     } 

     public void setId(String id) { 
      this.id = id; 
     } 

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

     @Override 
     public boolean equals(Object obj) { 
      if (this == obj) { 
       return true; 
      } 
      if (obj == null) { 
       return false; 
      } 
      if (!(obj instanceof Employee)) { 
       return false; 
      } 
      Employee other = (Employee) obj; 
      if (emailAddress == null) { 
       if (other.emailAddress != null) { 
        return false; 
       } 
      } else if (!emailAddress.equals(other.emailAddress)) { 
       return false; 
      } 
      return true; 
     } 





    } 

} 

出力。

Hello World! 
Employee List [Employee [[email protected], id=1], Employee [[email protected], id=2], Employee [[email protected], id=3]] 
Employee with employee email [email protected] and employee id 3 already exists 
[Employee [[email protected], id=1], Employee [[email protected], id=2]] 

従業員3は、従業員と同じ電子メールアドレスを持ち、リストから除外されています。

HTH

+0

employee3オブジェクトが追加されていないことを通知するロジックを追加できますか? –

+0

回答が役に立つ場合は、答えの左側のチェックオプションをクリックしてください – user641887

+0

私は個人的にはこのソリューションが気に入っていますが、Sritamが以前にセットを知らなかった場合、その挿入順序は 'HashSet' 。挿入順序を保持する場合、代わりに 'LinkedHashSet'を使うべきです。そして 'TreeSet'は自然順序付けによって要素を順序づけます。 – baibekj

0

もっと効率的な方法は、リストに従業員を追加する前に、電子メールの別のセット(設定<文字列> emailSet)を維持し、それを毎回チェックするために、次のようになります。

if (!emailSet.contains(emp.getEmail()) { 
    employeeList.add(emp); 
    emailSet.add(emp.getEmail()); 
} else { 
    //show error message 
} 
関連する問題