Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用lambda表达式创建嵌套hashmap_Java_Lambda_Collections_Java 8_Hashmap - Fatal编程技术网

Java 使用lambda表达式创建嵌套hashmap

Java 使用lambda表达式创建嵌套hashmap,java,lambda,collections,java-8,hashmap,Java,Lambda,Collections,Java 8,Hashmap,我想从Java中的输入ArrayList使用lambda表达式创建三层HashMap。这三层是年、月和周,下面是我的前两层代码。然而,在第二层我得到了一个错误(第一层工作良好) public HashMap createHashMapOfTimePeriod(列出ABCD详细信息){ Mapresult1=abcDetails.stream().collect(Collectors.groupingBy(abcDetails::getYear)); Mapreult2=result1.entry

我想从Java中的输入
ArrayList
使用lambda表达式创建三层
HashMap
。这三层是年、月和周,下面是我的前两层代码。然而,在第二层我得到了一个错误(第一层工作良好)

public HashMap createHashMapOfTimePeriod(列出ABCD详细信息){
Mapresult1=abcDetails.stream().collect(Collectors.groupingBy(abcDetails::getYear));
Mapreult2=result1.entrySet().stream().collect(Collectors.groupingBy(e->(e.getValue().stream().collect)(Collectors.groupingBy(AbcDetails::getWeek())));
返回null;
}

您可以使用嵌套的
收集器实现这一点:

Map<Integer,Map<Integer,Map<Integer,AbcDetails>>> groups = 
  abcDetails.stream ()
        .collect(Collectors.groupingBy (AbcDetails::getYear,
                                        Collectors.groupingBy (AbcDetails::getMonth,
                                                               Collectors.toMap (AbcDetails::getWeek, Function.identity()))));

但在第二层和第三层,数据是重复的,只有一年是唯一的,这在这里有效吗?@shridhar唯一的问题可能是最内层的地图。如果有多个对象具有相同的年、月和周,则在最内部的贴图中会有一个重复的关键点,并且必须决定如何解析它。您可以将结构更改为
Map
,以考虑此类重复键。
Map<Integer,Map<Integer,Map<Integer,AbcDetails>>> groups = 
  abcDetails.stream ()
        .collect(Collectors.groupingBy (AbcDetails::getYear,
                                        Collectors.groupingBy (AbcDetails::getMonth,
                                                               Collectors.toMap (AbcDetails::getWeek, Function.identity()))));
Map<Integer,Map<Integer,Map<Integer,List<AbcDetails>>>> groups = 
  abcDetails.stream ()
        .collect(Collectors.groupingBy (AbcDetails::getYear,
                                        Collectors.groupingBy (AbcDetails::getMonth,
                                                               Collectors.groupingBy (AbcDetails::getWeek))));