如何使用guava谓词在数组列表中获取重复元素

Kri*_*ger 2 java guava predicates google-guava-cache

我有一组包含元素的数组.我需要通过使用java中断言的guava比较特定字段来找到该数组中的重复元素.

例如:
我有一个带有员工详细信息的arraylist.我需要找到同名员工的详细信息.

Jea*_*art 6

您可以使用Guava Multimaps.index方法:

ImmutableListMultimap<String, Employee> byName = 
  Multimaps.index(employees, new Function<Employee, String>(){
      @Override
      public String apply(Employee e) {
          return e.getName();
      } 
  });
Run Code Online (Sandbox Code Playgroud)

在Java 8中:

Map<Department, List<Employee>> byName = 
    employees.stream()
             .collect(Collectors.groupingBy(Employee::getName))
Run Code Online (Sandbox Code Playgroud)

关于您的评论,您似乎希望过滤列表以仅保留具有特定名称的员工.

所以使用番石榴:

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);
Run Code Online (Sandbox Code Playgroud)

使用Java 8:

List<Employee> filteredList = employees.stream()
                                       .filter(e -> e.getName().equals("John Doe"))
                                       .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)