我的id有一些对象。我希望根据id对对象进行分组。我的意思是,具有相同id的对象应该在一个组中。有什么想法吗?
例如:
id Name
1 Allah
1 Mohammad
2 Ali
2 Fatemeh
2 Hassan
3 hossein
3 Mahdi
3 Reza
答案 0 :(得分:2)
假设你有这种类型:
class Person {
final int id;
final String name;
Person(int id, String name) {
this.id = id;
this.name = name;
}
}
然后您可以写下以下内容:
List<Person> people = Arrays.asList(new Person(1, "Allah"), new Person(1, "Mohammad"), ..);
Map<Object, List<Person>> peoplePerId =
people.stream()
.collect(Collectors.groupingBy(p -> p.id));
或许,甚至更好:
Map<Integer, List<String>> namesPerId =
people.stream()
.collect(Collectors.groupingBy(
p -> p.id,
Collectors.mapping(p -> p.name, Collectors.toList())
));
Java 8之前的版本:
Map<Integer, List<String>> namesPerId = new HashMap<>();
for (Person person : people) {
List<String> list = namesPerId.get(person.id);
if (list == null) {
list = new ArrayList<>();
namesPerId.put(person.id, list);
}
list.add(person.name);
}
答案 1 :(得分:1)
如果您不愿意使用第三方库,则可以使用Google的Guava库。存在将MultiMap
映射到值列表see here的Map<Integer, List<Person>>
。它与values()
略有不同。它有一些内置功能,如RewriteCond $1 !^(index\.php|robots\.txt|style\.css|sitemap\.xml)
RewriteCond %{REQUEST_URI} !/img/ [NC]
RewriteRule ^(.*)$ - [F]
,可将所有列表中的所有值作为平面集合返回。哪种变体更适合取决于您想要对地图做什么。