在 Java 中,Comparator 本身不是用来“分组”的,它是用来定义排序规则的。但你可以结合 Comparator + Stream / Collectors.groupingBy 来实现“按某种规则分组”或“分组内排序”。
下面按常见场景说明。
List<Person> list = ...;
Map<Integer, List<Person>> groupByAge =
list.stream()
.collect(Collectors.groupingBy(Person::getAge));
✅ 这里不需要 Comparator,用 groupingBy 即可。
Map<Integer, List<Person>> result =
list.stream()
.collect(Collectors.groupingBy(
Person::getAge,
Collectors.collectingAndThen(
Collectors.toList(),
l -> {
l.sort(Comparator.comparing(Person::getName));
return l;
}
)
));
比如:
Function<Person, String> groupRule = p ->
p.getAge() < 18 ? "未成年" : "成年";
Map<String, List<Person>> map =
list.stream()
.collect(Collectors.groupingBy(groupRule));
List<Person> sorted = list.stream()
.sorted(Comparator.comparing(Person::getAge))
.collect(Collectors.toList());
Map<Integer, List<Person>> map =
sorted.stream()
.collect(Collectors.groupingBy(Person::getAge));
Map<Integer, Map<String, List<Person>>> map =
list.stream()
.collect(Collectors.groupingBy(
Person::getAge,
Collectors.groupingBy(Person::getCity)
));
| 需求 | 用什么 |
|---|---|
| 分组 | Collectors.groupingBy |
| 排序 | Comparator |
| 分组 + 排序 | groupingBy + Comparator |
| 自定义分组 | Function |
如果你有具体业务场景(比如按区间、按状态、按字符串长度),可以直接贴代码,我帮你写完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。