【发布时间】:2020-11-25 22:28:36
【问题描述】:
假设我有一个这样的对象:
public class Person {
private String name;
private String surName;
private Set <String> domain;
创建这些对象的列表
List<Person> persons = List.of(new Person(...), new Person(...))
如何通过 Stream API 制作这个方法
public Map<String, List<Person>> getDomainsWithPersons(List<Person> persons) {
Map<String, List<Person>> domainsWithPersons = new HashMap<>();
for (Person person : persons) {
for (String domain : person.getDomains()) {
domainsWithPersons.computeIfAbsent(domain, p -> new ArrayList<>())
.add(person);
}
}
return domainsWithPersons;
}
因此该方法只返回一个流,例如:
public Map<String, List<Person>> getDomainsWithPersons(List<Person> persons) {
return persons.stream()...
}
【问题讨论】:
-
Person1, Person2是名字,不是姓氏。对吗? -
只是 Person 对象
-
例如,如果您有
List.of(new Person("Person1","Surname1", Set.of("gmail","microsoft")), new Person("Person2","Surname1", Set.of("gmail","ebay")),new Person("Person2","Surname3", Set.of("paypal","ibm")), new Person("Person1","Surname2", Set.of("intel","microsoft")));,您希望如何分组? -
类似这样,但使用 StreamAPi
Map<String, List<Person>> personsByDomains = new Map<>(); for (Person person : persons) { for (String email : person.getEmails()) { // sets are iterable, we can just do this personsByDomain.putIfAbsent(domain, new ArrayList<Person>()); personsByDomain.get(domain).add(person); } }
标签: java java-stream