【问题标题】:Stream API group by enum按枚举流 API 组
【发布时间】:2018-08-07 09:06:13
【问题描述】:

我在使用 Java Stream API 方面需要一些帮助

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

如何通过枚举字段将我的列表分类为三个单独的列表。我知道如何使用三个流(list.filter().collect 三次)来做到这一点,但我认为这不是最好的方法。

【问题讨论】:

  • 您的问题不清楚。请创建一些示例。另外,显示您的其他方法的代码。这样我们就可以轻松了解您想要实现的目标,并更轻松地提供帮助以找到更好的解决方案 (How to Ask)。
  • 您确定要使用 lightweight-stream-api 标记问题吗?这是一个特殊的外部库,与 Java 8 附带的常规 Stream API 无关。如果您指的是后者,请改用 stream 标记。
  • 我怎样才能更改我的帖子????
  • 点击您问题下方的edit 链接。您可能想使用tour
  • 感谢您的建议

标签: java java-stream grouping


【解决方案1】:

我建议使用Collectors.groupingBy,它返回一个Map。由于您没有提供任何课程,我假设以下内容:

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));

使用Map 而不是三个不同的List 对象是有意义的。

【讨论】:

  • 请注意,OP 用 lightweight-stream-api 标记了问题,而不是 stream。他可能没有谈论 Java 8 附带的常规 Stream API。在这种情况下,您的答案无效。
  • @Zabuza 如果是这样,我必须删除我的答案。
  • 我已经尝试过这种方法,效果很好,再次感谢!!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多