Java 按枚举的流API组
我需要一些关于使用Java流API的帮助 我有一个对象列表,对象有枚举字段{Song,Klip,Karaoke}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
如何按枚举字段将列表排序为三个单独的列表。我知道如何使用三个流(
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如果是这样,我必须删除我的答案。我已经尝试过这种方法,效果很好,再次感谢!!!!!