Java Streams:将列表分组到地图地图

前端之家收集整理的这篇文章主要介绍了Java Streams:将列表分组到地图地图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何使用 Java Streams执行以下操作?

假设我有以下类:

class Foo {
    Bar b;
}

class Bar {
    String id;
    String date;
}

我有一个列表< Foo>并且我想将其转换为Map< Foo.b.id,Map< Foo.b.date,Foo&gt ;. I.e:首先由Foo.b.id组合,然后由Foo.b.date组合. 我正在努力使用以下两步法,但第二个甚至不编译:

Map<String,List<Foo>> groupById =
        myList
                .stream()
                .collect(
                        Collectors.groupingBy(
                                foo -> foo.getBar().getId()
                        )
                );

Map<String,Map<String,Foo>> output = groupById.entrySet()
        .stream()
        .map(
                entry -> entry.getKey(),entry -> entry.getValue()
                        .stream()
                        .collect(
                                Collectors.groupingBy(
                                        bar -> bar.getDate()
                                )
                        )
        );

提前致谢.

解决方法

您可以一次分组您的数据,假设只有不同的Foo:
Map<String,Foo>> map = list.stream()
        .collect(Collectors.groupingBy(f -> f.b.id,Collectors.toMap(f -> f.b.date,Function.identity())));

使用静态导入保存一些字符:

Map<String,Foo>> map = list.stream()
        .collect(groupingBy(f -> f.b.id,toMap(f -> f.b.date,identity())));

猜你在找的Java相关文章