如果您想按某个字段对给定的集合进行分组,每个组可能包含多个对象。这是我的GroupUtils
的一部分:
public static <K, V> Map<K, List<V>> groupMultipleBy(Collection<V> data, Function<V, K> classifier) {
return Optional.ofNullable(data).orElse(Collections.emptyList()).stream().collect(Collectors.groupingBy(classifier, Collectors.mapping(Function.identity(), Collectors.toList())));
}
使用示例。
您有以下类:
class A {
private String id;
private String name;
}
如果要对这个类的集合进行分组,可以使用:
List<A> collection = Collections.emptyList()
Map<String, List<A>> groupedById = GroupUtils.groupMultipleBy(collection, A::getId)
附言
为了给您提供更多选择,这是我的GroupUtils
的相关部分:
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class GroupUtils {
public static <K, V> Map<K, List<V>> groupMultipleBy(Collection<V> data, Function<V, K> classifier) {
return groupMultipleBy(data, classifier, Function.identity());
}
public static <K, V, S> Map<K, List<S>> groupMultipleBy(Collection<V> data, Function<V, K> classifier, Function<V, S> mapper) {
return groupMultipleBy(data, classifier, mapper, Collectors.toList());
}
public static <K, V, S, R extends Collection<S>> Map<K, R> groupMultipleBy(Collection<V> data, Function<V, K> classifier,
Collector<S, ?, R> downstream) {
return groupMultipleBy(data, classifier, (Function<V, S>)Function.identity(), downstream);
}
public static <K, V, S, R extends Collection<S>> Map<K, R> groupMultipleBy(Collection<V> data, Function<V, K> classifier,
Function<V, S> mapper, Collector<S, ?, R> downstream) {
return Optional.ofNullable(data).orElse(Collections.emptyList()).stream()
.collect(Collectors.groupingBy(classifier, Collectors.mapping(mapper, downstream)));
}
public static <K, V> Map<K, V> groupSingleBy(Collection<V> data, Function<V, K> keyMapper) {
return groupSingleBy(data, keyMapper, Function.identity());
}
public static <K, V, S> Map<K, S> groupSingleBy(Collection<V> data, Function<V, K> keyMapper, Function<V, S> valueMapper) {
return Optional.ofNullable(data).orElse(Collections.emptyList()).stream().collect(Collectors.toMap(keyMapper, valueMapper));
}
}
keys
分组是否有意义? - LuCioA
实例的keys
列表中的每个条目都有一个条目。 - Henrik Aasted SørensenA.keys
作为键本身(不是列表)。 - akopkeys
包含[value,value2]
,您想要使用{[value1= A()],[value2=A()]}
进行映射,是这样吗?列表中的每个值都应该是映射中的键。 - Ryuzaki L