Java 使用lambda表达式创建嵌套hashmap
我想从Java中的输入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
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))));