2015-09-17 36 views

回答

6

您可以使用番石榴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)) 

關於你的評論,似乎要過濾列表中只保留員工一個具體的名字。

因此,使用番石榴:

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()); 
+0

什麼廣告Java8拉姆達這裏表達? –

+0

@hege_hegedus你明白了吧 –

+0

這樣更好!我只想過'Multimaps.index(employees,e - > e.getName())':) –