何百もの従業員オブジェクトがあります。従業員オブジェクトには、名前、年齢、給与があります。ある時点で、特定の名前の従業員または従業員を取得する必要があります。
考えてるだけ
HashMap<String, List>
名前をキーに、すべてのオブジェクトをリストに追加します。
私は map がコレクションではないことを知っています:P
地図の代わりに最高のコレクションのアイデア。いつでも取り出せるように。
何百もの従業員オブジェクトがあります。従業員オブジェクトには、名前、年齢、給与があります。ある時点で、特定の名前の従業員または従業員を取得する必要があります。
考えてるだけ
HashMap<String, List>
名前をキーに、すべてのオブジェクトをリストに追加します。
私は map がコレクションではないことを知っています:P
地図の代わりに最高のコレクションのアイデア。いつでも取り出せるように。
Employee
最初に、関連するすべてのフィールド(名前、年齢、給与など)を含むクラスを作成する必要があります。次に、次を使用できますHashMap
。
Map<String, Employee> map = new HashMap<String, Employee>();
List<Employee>
があり、名前や年齢などでリストをフィルタリングしたい場合は、lambdajがこの目的に適していると思います。
次に例を示します。すべての従業員を名前でフィルタリングするとします。
HasArgumentWithValue<Employee, String> matcher = Lambda.having(Lambda.on(Employee.class).getName(), Matchers.equalTo(name));
List<Employee> filteredEmployess = Lambda.filter(matcher, allEmployess);
静的インポートにより、上記のコードは次のようになります。
List<Employee> filteredEmployess = filter(having(on(Employee.class).getName(), equalTo(name)), employees);
あなたはここでより多くの例を見つけることができます
年齢については、30歳を超える従業員を見つけると便利です。
HasArgumentWithValue<Employee, Integer> matcher = Lambda.having(Lambda.on(Employee.class).getAge(), Matchers.greaterThan(30))
Employeeクラスの name 属性をキーとして使用する場合は、同じ名前の従業員がいないことを確認してください。マップはキー (あなたの場合は文字列) を使用し、各キーは一意である必要があります。そうであれば、HashMap< String name, Employee> で問題ありません。
(すべての属性を持つEmployeeクラスを作成します)
ただし、それらが一意でない場合、多くの従業員が同じ名前を持つ可能性があるため、Employeeクラスに属性を追加することを検討する必要があります。何かのようなもの
private int ID;
次のようにキーとして使用します。
HashMap<int, Employee>
HashMap は、時間の複雑さが非常に優れています。平均して、get()呼び出しは時間 T(n) = O(1) (つまり一定時間) を取得します。プットコールも同様です。
ある時点で、特定の名前の従業員または従業員を取得する必要があります。
上記の行から、同じ名前の従業員が複数いると思いました。この場合は、guava のMultimapをお勧めします。例: HashMultimap
MapはCollectionクラスを拡張しませんが。ただし、Map は Collection の一種です。したがって、目的がHashMapによって提供される場合; それからそれのために行くことを提案します。
HashMap<String, Employee> map = new HashMap<String, Employee>();
HashMap があなたのニーズに合わない理由はわかりませんが、すべての従業員を (コレクションであるかのように) 反復できるようにしたい場合は、引き続き次を使用できます。
Map<String, List<Employee>> map = new HashMap<String, List<Employee>>();
// populate your map
for (List<Employee> list : map.values()) {
for (Employee employee : list) {
// do something
}
}