在使用Java Stream API时我需要一些帮助
我有一个对象列表,该对象具有ENUM字段{Song,Klip,Karaoke}
如何按Enum字段将列表分为三个单独的列表。我知道如何使用三个流(list.filter().collect
三次)来做到这一点,但是我认为这不是最好的方法。
答案 0 :(得分: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
对象是有意义的。