我有一个枚举看起来像:
public enum Movies {
SCIFI_MOVIE("SCIFI_MOVIE", 1, "Scifi movie type"),
COMEDY_MOVIE("COMEDY_MOVIE", 2, "Comedy movie type");
private String type;
private int id;
private String name;
Movies(String type, int id, String name) {
this.type = type;
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
}
我知道我可以使用信息流创建一组电影enum
,其中包含:
Set<Movie> Movie_SET = Arrays.stream(Movie.values()).collect(Collectors.toSet());
如果我想创建一组枚举电影ID,该怎么办?有没有办法用流来做到这一点?
答案 0 :(得分:3)
是的,假设你的id有一个吸气剂,你的电影枚举可能如下所示:
public enum Movies {
SCIFI_MOVIE("SCIFI_MOVIE", 1, "Scifi movie type"),
COMEDY_MOVIE("COMEDY_MOVIE", 2, "Comedy movie type");
private String type;
private int id;
private String name;
Movies(String type, int id, String name) {
this.type = type;
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
}
然后,您可以使用Stream.map()
:
Set<Integer> movieIds = Arrays.stream(Movies.values()).map(Movies::getId)
.collect(Collectors.toSet());
BTW,创建所有电影集的另一种方法是使用EnumSet.allOf()
:
Set<Integer> movieIds = EnumSet.allOf(Movies.class).stream().map(Movies::getId)
.collect(Collectors.toSet());
答案 1 :(得分:2)
您可以为此目的使用EnumSet实现,例如
获取电影集:
Set<Movies> movies = EnumSet.allOf(Movies.class);
仅获取电影ID:
Set<Integer> moviesIds = movies.stream().map(Movies::getId).collect(Collectors.toSet());
答案 2 :(得分:1)
如果您能够获得Enum
值的流,那么很容易实现休息。
您可以使用custom Collector impl
(我最喜欢的),请参阅下面的自定义收藏家示例: -
Set<Integer> movieIds = Arrays
.stream(Movies.values())
.collect(
HashSet::new,
(set, e) -> set.add(e.getId()),
HashSet::addAll
);
或者您可以使用map
仅提取ID,collect
可以像往常一样将这些ID收集到Set中。
Set<Integer> movieIds = Arrays
.stream(Movies.values())
.map(Movies::getId)
.collect(Collectors.toSet());