使用Java8'封装集合到映射转换;将流和收集器合并到一个方法中
我相信这个问题不是重复的,尽管在Java8中有很多关于将列表转换为映射的问题。请容忍我 我试图做的是逐步为自己构建一个函数库,以避免重复涉及流和收集器的复杂代码,这往往过于冗长 目前,我正在创建一个方法,该方法将集合转换为按集合对象的某个字段分组的映射 假设我们有这样一门课:使用Java8'封装集合到映射转换;将流和收集器合并到一个方法中,java,collections,java-8,java-stream,collectors,Java,Collections,Java 8,Java Stream,Collectors,我相信这个问题不是重复的,尽管在Java8中有很多关于将列表转换为映射的问题。请容忍我 我试图做的是逐步为自己构建一个函数库,以避免重复涉及流和收集器的复杂代码,这往往过于冗长 目前,我正在创建一个方法,该方法将集合转换为按集合对象的某个字段分组的映射 假设我们有这样一门课: class SomeClass { private String someField; private String anotherfield; public String ge
class SomeClass {
private String someField;
private String anotherfield;
public String getSomeField() {
return someField;
}
public String getAnotherField() {
return anotherfield;
}
}
和一份清单:
List<SomeClass> myList = new ArrayList<SomeClass>();
//populate the list...
可以这样做:
Map<String,List<SomeClass>> myMap =
myList.stream().collect(Collectors.groupingBy(o -> o.getSomeField() ));
Map myMap=
myList.stream().collect(收集器.groupingBy(o->o.getSomeField());
这是我无法解决的部分。正如我所说的,我想将其隐藏到我打算在项目中使用的实用程序类中的一个更干净的方法中。方法的签名:
public static <T, R> Map<R, List<T>> collectionToMap(
Collection<T> coll, Function<? super T, ? extends R> groupByKey)
公共静态映射集合映射(
集合coll,函数您不需要映射
。只需将groupByKey
函数
传递给分组依据
:
public static <T, R> Map<R, List<T>> collectionToMap(Collection<T> coll, Function<? super T, ? extends R> groupByKey) {
return coll.stream().collect(Collectors.groupingBy(groupByKey));
}
public static Map collectionToMap(Collection coll,Functionargh,它很简单,但想不起来,非常感谢。
Map<String,List<SomeClass>> amap = collectionToMap(myList, o -> o.getSomeField());
public static <T, R> Map<R, List<T>> collectionToMap(Collection<T> coll, Function<? super T, ? extends R> groupByKey) {
Map<R,List<T>> amap = coll.stream().collect(Collectors.groupingBy(
T::groupBy,
Collectors.mapping(T, Collectors.toList())
));
return amap;
}
public static <T, R> Map<R, List<T>> collectionToMap(Collection<T> coll, Function<? super T, ? extends R> groupByKey) {
return coll.stream().collect(Collectors.groupingBy(groupByKey));
}