Java 映射到映射
我有一门接口课程和一门课堂课程 首先,我尝试将CourseCLS对象按相同的数字分组。我不确定它是否正确Java 映射到映射,java,dictionary,java-8,java-stream,Java,Dictionary,Java 8,Java Stream,我有一门接口课程和一门课堂课程 首先,我尝试将CourseCLS对象按相同的数字分组。我不确定它是否正确 Map<Integer, List<CourseCLS>> first = courses.values().stream() .collect(Collectors.groupingBy(c -> c.getNumber())); 由于CourseCLS实现了Course,所以您只需使用Course作为值创建一个新映射
Map<Integer, List<CourseCLS>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber()));
由于CourseCLS实现了Course,所以您只需使用Course作为值创建一个新映射,它将接受Course接口的任何实例,因此也将接受CourseCLS。
因此,通过您的第一个映射,将每个K,V对添加到结果映射中,因为CourseCLS实现了Course,您只需使用Course作为值创建一个新映射,它将接受Course接口的任何实例,因此将接受CourseCLS。
因此,检查您的第一个映射,并将每个K,V对添加到结果映射中您正试图解决一个不存在的问题。只要写
Map<Integer, List<Course>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber()));
由于groupingBy允许下游收集器收集比其自身收集范围更广的类型,因此可以将收集课程实例的toList收集器与收集课程实例的groupingBy收集器组合。Java 8的类型推断检测此构造的有效性。您试图解决一个不存在的问题。只要写
Map<Integer, List<Course>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber()));
由于groupingBy允许下游收集器收集比其自身收集范围更广的类型,因此可以将收集课程实例的toList收集器与收集课程实例的groupingBy收集器组合。Java 8的类型推断检测这个构造的有效性。你能准确地编写代码吗?我试过了,但没用。先映射,然后这样做:Map second=newhashmap;第一。foreach第二:putIfAbsent;这将把第一个的每K,V添加到第二个中,而不需要替换键。您能准确地编写代码吗?我试过了,但没用。先映射,然后这样做:Map second=newhashmap;第一。foreach第二:putIfAbsent;这会将第一个的每一个K,V添加到第二个中,而不需要替换键。您可以强制转换它,尽管您会收到警告。但是为什么不先声明为需要返回的类型呢?课程没有getNumber吗?你在用地图做其他事情吗?尽管你会得到警告,你还是可以投下它。但是为什么不先声明为需要返回的类型呢?课程没有getNumber吗?你在用地图做其他事情吗?
Map<Integer, List<Course>> first =
courses.values().stream()
.collect(Collectors.groupingBy(c -> c.getNumber(), Collectors.toList()));