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

时间:2017-11-30 10:03:47

标签: java lambda collections java-8 hashmap

我想使用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;

}

1 个答案:

答案 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}}