Как получить дубликаты элементов в списке массивов, используя предикаты гуавы

У меня есть массив с набором элементов. Мне нужно найти дубликаты элементов в этом массиве, сравнивая конкретное поле с использованием гуавы, основанной на 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());
Другие вопросы по тегам