使用Java 8流将enum转换为set

Hap*_*mon 6 stream java-8

我有一个枚举看起来像:

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;
}
Run Code Online (Sandbox Code Playgroud)

}

我知道我可以使用流来创建一组电影enum

Set<Movie> Movie_SET = Arrays.stream(Movie.values()).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

如果我想创建一组枚举电影 id 该怎么办?有没有办法用流来做到这一点?

Vin*_*ati 4

如果你能够获得Enum价值流,那么休息就很容易实现。

您可以使用custom Collector impl(我一直以来最喜欢的),请参阅下面的自定义收集器示例:-

 Set<Integer> movieIds = Arrays
                .stream(Movies.values())
                .collect(
                         HashSet::new,
                         (set, e) -> set.add(e.getId()),
                         HashSet::addAll
                );
Run Code Online (Sandbox Code Playgroud)

或者您可以像往常一样使用map仅获取 id 并将collect这些 id 收集到集合中。

Set<Integer> movieIds = Arrays
                        .stream(Movies.values())
                        .map(Movies::getId)
                        .collect(Collectors.toSet()); 
Run Code Online (Sandbox Code Playgroud)