Java 按枚举的流API组

Java 按枚举的流API组,java,java-stream,grouping,Java,Java Stream,Grouping,我需要一些关于使用Java流API的帮助 我有一个对象列表,对象有枚举字段{Song,Klip,Karaoke} 如何按枚举字段将列表排序为三个单独的列表。我知道如何使用三个流(list.filter().collect三次)来实现这一点,但我认为这不是最好的方法。我建议使用收集器。groupingBy,它返回一个映射。由于您没有提供任何类,我假设: enum SomeEnum { SONG, KLIP, KARAOKE } static class SomeClass

我需要一些关于使用Java流API的帮助

我有一个对象列表,对象有枚举字段{Song,Klip,Karaoke}


如何按枚举字段将列表排序为三个单独的列表。我知道如何使用三个流(
list.filter().collect
三次)来实现这一点,但我认为这不是最好的方法。

我建议使用
收集器。groupingBy
,它返回一个
映射。由于您没有提供任何类,我假设:

enum SomeEnum {
    SONG,
    KLIP,
    KARAOKE
}

static class SomeClass {

    SomeEnum someEnum;

    public SomeClass(SomeEnum someEnum) {
        this.someEnum = someEnum;
    }

    public SomeEnum getSomeEnum() {
        return someEnum;
    }
}
然后,您可以简单地使用:

List<SomeClass> list = Stream.of(
            new SomeClass(SomeEnum.SONG),
            new SomeClass(SomeEnum.SONG),
            new SomeClass(SomeEnum.KLIP),
            new SomeClass(SomeEnum.KARAOKE),
            new SomeClass(SomeEnum.KARAOKE))
            .collect(Collectors.toList());

// this is what you are looking for
Map<SomeEnum, List<SomeClass>> map = list.stream()
        .collect(Collectors.groupingBy(SomeClass::getSomeEnum));
List List=Stream.of(
新的SomeClass(SomeEnum.SONG),
新的SomeClass(SomeEnum.SONG),
新的SomeClass(SomeEnum.KLIP),
新的SomeClass(SomeEnum.卡拉OK),
新SomeClass(SomeEnum.KARAOKE))
.collect(Collectors.toList());
//这就是你要找的
Map=list.stream()
.collect(Collectors.groupingBy(SomeClass::getSomeEnum));

使用
地图
而不是三个不同的
列表
对象是有意义的。

您的问题不清楚。请创建一些示例。此外,请展示其他方法的代码。这样,我们就可以很容易地理解您想要实现的目标,并更容易地提供帮助以找到更好的解决方案()。您确定要用轻量级流api标记这个问题吗?这是一个特殊的外部库,与Java8附带的常规流API无关。如果你是指后者,请使用stream标签。如何更改我的帖子???点击你问题下方的链接。您可能想参加。感谢您的建议注意,OP使用轻量级流api而不是流来标记问题。他可能没有提到Java8附带的常规流API。在这种情况下,你的答案是无效的。@Zabuza如果是这样,我必须删除我的答案。我已经尝试过这种方法,效果很好,再次感谢!!!!!