Как получить дубликаты элементов в списке массивов, используя предикаты гуавы
У меня есть массив с набором элементов. Мне нужно найти дубликаты элементов в этом массиве, сравнивая конкретное поле с использованием гуавы, основанной на Java.
Например:
У меня есть arraylist с набором деталей сотрудников. Мне нужно найти информацию о сотрудниках с таким же именем.
1 ответ
Решение
Вы можете использовать метод Guava Multimaps.index:
ImmutableListMultimap<String, Employee> byName =
Multimaps.index(employees, new Function<Employee, String>(){
@Override
public String apply(Employee e) {
return e.getName();
}
});
В Java 8:
Map<Department, List<Employee>> byName =
employees.stream()
.collect(Collectors.groupingBy(Employee::getName))
Что касается вашего комментария, кажется, что вы хотите отфильтровать список, чтобы сохранить только сотрудников с определенным именем.
Итак, используя Guava:
List<Employee> employees = // ...
Collection<Employee> filtered =
Collections2.filter(employees, new Predicate<Employee>() {
@Override
public boolean apply(Employee e) {
return e.getName().equals("John Doe");
}
});
// if you want a List:
List<Employee> filteredList = new ArrayList<>(filtered);
Используя Java 8:
List<Employee> filteredList = employees.stream()
.filter(e -> e.getName().equals("John Doe"))
.collect(Collectors.toList());