私がarraylistを持っていると仮定して、私はarraylistに複数の従業員オブジェクトを動的に追加しています。従業員オブジェクトには、ID、名前、電子メールのようなフィールドがあります。私の要件は、私が従業員オブジェクトをarraylistに追加するときです。 arraylistに既に別のオブジェクトが追加されている電子メールを持つオブジェクトが追加されたとします。次に、arraylistに現在のオブジェクトを追加するか、いくつかのエラーメッセージを表示するべきではありません。可能な限り短時間でこのことを達成するためにコレクションモジュールで利用可能なメソッドはありますか?複数の従業員オブジェクトを含むarraylistで重複した電子メールIDを検出する
答えて
// 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());
1これは私が探しているものです:) –
あなたは、配列リストのすべてのノードをチェックし、あなたの現在の電子メールアドレスが存在するかどうかを確認します。存在する場合はfalseまたはtrueを返し、メッセージを表示します。
親愛なる人...私はあなたがここで指定したのと同じことをしました。しかし、時間がかかりました。限定的な繰り返しでこれを達成するために、いくつかの定義済みのコレクションメソッドまたはJava 8の機能を使用できますか? –
あなたの電子メールをデータベースに入れて、簡単なクエリチェックだけで、存在するかどうかを確認してください。 –
sqlliteはあなたの仕事にとってとても良いデータベースです。設定が非常に簡単で、インストールも不要です。 –
私はあなたの質問を正しく持っていれば、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
employee3オブジェクトが追加されていないことを通知するロジックを追加できますか? –
回答が役に立つ場合は、答えの左側のチェックオプションをクリックしてください – user641887
私は個人的にはこのソリューションが気に入っていますが、Sritamが以前にセットを知らなかった場合、その挿入順序は 'HashSet' 。挿入順序を保持する場合、代わりに 'LinkedHashSet'を使うべきです。そして 'TreeSet'は自然順序付けによって要素を順序づけます。 – baibekj
もっと効率的な方法は、リストに従業員を追加する前に、電子メールの別のセット(設定<文字列> emailSet)を維持し、それを毎回チェックするために、次のようになります。
if (!emailSet.contains(emp.getEmail()) {
employeeList.add(emp);
emailSet.add(emp.getEmail());
} else {
//show error message
}
- 1. 従業員テーブルの複数のエントリを含む従業員テーブルの各従業員の2番目に高い給料を得る方法
- 2. 1つのデータ列に複数の従業員IDを格納
- 3. 従業員IDに基づいて異なる従業員に電子メールを送信するためのレポートをスケジュールします。
- 4. employee.idのみを含む配列への従業員オブジェクトのコレクション
- 5. 従業員キーを含む複数の列を持つ表。従業員のマスターにリンクして名前を取得する方法
- 6. 複数のArrayListをViewHolderに含むArrayList
- 7. 重複した電子メールを別の値に更新する
- 8. 同じ添付ファイルを含む複数の電子メールを送信する
- 9. Heroku:複数の従業員に拡大する方法
- 10. PagerAdapterページのフラグメントを含む重複ID
- 11. 私は複数の従業員のためのExcelレポートを生成したい
- 12. 複数のBCCアドレスを含むMandrill API経由で電子メールを送信
- 13. HTML電子メールの重複コンテンツOutlook 2007
- 14. 電子メールの重複チェックphpとデータベース
- 15. laravel 5の従業員データを含む従業員の総給与計算方法は?
- 16. 地区および従業員の従業員数をカウントするクエリ
- 17. SharedPreferencesで重複した値を含むArrayListを保存します。
- 18. django登録 - 複数のユーザーに電子メールIDを許可
- 19. 従業員テーブルの上司である従業員を表示するSQLクエリ
- 20. フォーム(ニュースレター)で重複した電子メールの送信を防止する方法
- 21. 自動増分従業員ID
- 22. C#従業員名前で検索
- 23. 電子メールの文字列内の重複を削除する
- 24. 1人の従業員に複数の住所を添付する
- 25. Javascriptを複数の電子メールの正規表現の検証
- 26. LDAP PHPを使用して従業員IDを取得する
- 27. 異なる変数を含む重複オブジェクトの削除
- 28. Suitescript - nlapiSendEmail()の場合、送信者に従業員レコードではない電子メールを送信できますか?
- 29. PHPで選択したユーザーの電子メールのみに複数の電子メールを送信するには?
- 30. ASP.NET MVC ID電子メール/特殊文字を含むユーザー名
'ArrayList'は最適なストレージコレクションではありません。私は代わりに 'Map'を使うことができると思います –
私はあなたのコンピュータをオフにして、紙と鉛筆を手に入れて始めてください。 **あなたの問題を解決するために必要なステップ**を言葉で**書きましょう。 Java構文についてはまったく心配しないでください。あなたが手で行う必要がある場合には、問題をどのように解決するかに集中してください。 –
私はこの質問の答えを持っています。しかし、あらかじめ定義されたコレクションクラスのメソッドや何かを使って、この目標を達成するための最短の方法が必要です。私がここに尋ねたのはその理由です。 –