比如 users.stream().collect(Collectors.groupingBy(u->u.getEdu + "" + u->u.getCity + "" + u->u.getCountry)); users.stream().collect(Collectors.groupingBy(u->u.getEdu + "" + u->u.getCity + "" + u->u.getCountry +u->.getGender)); 怎么使用函数封装 groupingBy 里面的条件比较好,因为除了里面拼接条件有不一样,其他都一样,(只是单纯讨论,看看除了用两个 Stream 写之外有没有别的方式,用一个 Stream 然后 groupBy 一个 Function )
1
ghouleztt 2022-08-14 12:12:45 +08:00 via iPhone 3
本类添加一个方法,private static String genGroupKey(User user, int type){},此方法根据 type 的不同返回不同的组合 key 。使用的时候 users.stream().collect(Collectors.groupingBy(s->genGroupKey(s,1))。手机打字将就看吧
|
2
unregister OP @ghouleztt 谢谢,这个方法可以。
|
3
aguesuka 2022-08-15 01:45:00 +08:00 1
@SafeVarargs
public static <T> Collector<T, ?, Map<String, List<T>>> groupByProperties(Function<? super T, String>... properties) { return Collectors.groupingBy(t -> Arrays.stream(properties) .map(getter -> getter.apply(t)) .collect(Collectors.joining(/*FIXME*/))); } users.stream().collect(groupByProperties(User::getEdu, User::getCity, User::getCountry)) |
4
qinxi 2022-08-15 09:53:22 +08:00 1
如果你后面不需要使用组合 key 的各项, 可以按 1 楼的 string 方式
如果你需要使用, map 的 key 可以是自己定义的类, 处理 tostring 和 hashcode 就行, |
6
unregister OP |