従業員の詳細を含むオブジェクト配列のリストがあります。従業員 ID に基づいて重複する従業員を見つけ、作成日を使用して古い従業員の詳細を削除する必要があります。
Google Guava または Apache Commons Collection を使用してこれを行う必要があります。
従業員の詳細を含むオブジェクト配列のリストがあります。従業員 ID に基づいて重複する従業員を見つけ、作成日を使用して古い従業員の詳細を削除する必要があります。
Google Guava または Apache Commons Collection を使用してこれを行う必要があります。
これに Guava や Apache Collections を使用する必要はないと思います。
従業員 ID から従業員の詳細へのマップを作成し、これを更新して、最近作成された従業員の詳細を取得するだけです。
LinkedHashMap<EmployeeId, EmployeeDetails> map = new LinkedHashMap<>();
for (EmployeeDetails details : list) {
if (!map.containsKey(details.getEmployeeId())) {
map.put(details.getEmployeeId(), details);
} else {
EmployeeDetails previous = map.get(details.getEmployeeId());
if (previous.getCreatedDate().before(details.getCreatedDate())) {
map.put(details.getEmployeeId(), details);
}
}
}
List<EmployeeDetails> deduplicated = new ArrayList<>(map.values());
Google Guava または Apache Commons Collection を使用する必要がない場合は、Java 8 のみを使用します (ID として整数を使用しますが、何でもかまいません)。
Map<Integer, List<Employee>> employeeMap = employees.stream()
.collect(Collectors.groupingBy(Employee::getId));
List<Employee> filtered = collect.entrySet().stream()
.map(e -> Collections.max(e.getValue(), Comparator.comparing(Employee::getCreatedDate)))
.collect(Collectors.toList());
Guava を使用する必要がある場合、これは機能するはずです。
Map<Integer, Collection<Employee>> employeeMap = Multimaps.index(employees, Employee::getId).asMap();
Collection<Employee> filtered = Maps.transformValues(employeeMap, l -> Ordering.from(Comparator.comparing(Employee::getCreatedDate)).max(l)).values();