我想使用Java中输入HashMap
的lambda表达式创建三层ArrayList
。这三个层是年,月和周,这是我前两层的代码。但是,在第二层我收到错误(第一层工作正常)。
public HashMap<Integer,HashMap<Integer,HashMap<Integer,AbcDetails>>> createHashMapOfTimePeriod(List<AbcDetails> abcDetails){
Map<Integer,List<AbcDetails>>result1=abcDetails.stream().collect(Collectors.groupingBy(AbcDetails::getYear));
Map<Integer,Map<Integer,AbcDetails>>reult2=result1.entrySet().stream().collect(Collectors.groupingBy(e -> (e.getValue().stream().collect(Collectors.groupingBy(AbcDetails::getWeek)))));
return null;
}
答案 0 :(得分:4)
您可以使用嵌套的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()))));
s:
AbcDetails
请注意,如果可能有多个Map
实例具有相同的年,月和周,则内部Map<Integer,Map<Integer,Map<Integer,List<AbcDetails>>>> groups =
abcDetails.stream ()
.collect(Collectors.groupingBy (AbcDetails::getYear,
Collectors.groupingBy (AbcDetails::getMonth,
Collectors.groupingBy (AbcDetails::getWeek))));
将具有相同键的多个值,因此上述代码将失败。解决此类问题的一种方法是将输出更改为:
{{1}}