Java8 Stream API:将列表分组到自定义类中

时间:2016-07-24 14:57:57

标签: java java-8 java-stream

我正在尝试通过Java8的流API构建自定义类实例。

public class Foo {
    Group group;
    // other properties

    public Group getGroup() { return this.group; }

    public enum Group { /* ... */ };
}

public class FooModel {
    private Foo.Group group;
    private List<Foo> foos;

    // Getter/Setter
}

...

List<Foo> inputList = getFromSomewhere();

List<FooModel> outputList = inputList
    .stream()
    .collect(Collectors.groupingBy(Foo::getGroup,
                                   ???));

但我不知道Collector downstream必须如何。 我是否必须自己实施Collector(不要这么认为),还是可以通过Collectors.次电话的组合来实现这一目标?

1 个答案:

答案 0 :(得分:2)

你正在寻找这样的东西:

List<FooModel> outputList = inputList
    .stream()
    .collect(Collectors.groupingBy(Foo::getGroup))// create Map<Foo.Group,List<Foo>>
.entrySet().stream() // go through entry set to create FooModel
.map(
entry-> new FooModel (
entry.getKey(),
entry.getValue()
)
).collect(Collectors.toList());