首页 > 解决方案 > 从带有流的枚举中收集值不起作用

问题描述

我想要一个包含枚举中几乎所有值的列表。我试图在流的帮助下做到这一点,但我不知道为什么它不起作用。

例如,我正在尝试这样做:

 SortingType.stream() //
            .filter(d -> !d.getName().equals(SortingType.UNKNOWN.getName()))
            .forEach(u -> {
                sortingList.add(createSortingBE(locale, u, u.name().equalsIgnoreCase(sortingType.name())));
            }); 

.stream()显示为红色,我收到此消息:“无法解析 'SortingType' 中的方法 'stream'”

排序类型

public enum SortingType {
    DISTANCE("DISTANCE", 101, "Sorting POIs by distance"),
    PRICE("PRICE", 104, "Sorting POIS by price"),
    UNKNOWN("UNKNOWN", 000, "Unknown sorting option");

    private String name;
    private Integer identifier;
    private String description;

    SortingType(final String name, final Integer identifier, final String description) {
        this.name = name;
        this.identifier = identifier;
        this.description = description;
    }

    public static SortingType getByName(final String name) {
        return Stream.of(values()).filter(u -> u.name.equalsIgnoreCase(name)).findFirst().orElse(SortingType.UNKNOWN);
    }

    public static SortingType getByIdentifier(final Integer identifier) {
        return Stream.of(values()).filter(u -> u.identifier.equals(identifier)).findFirst().orElse(SortingType.UNKNOWN);
    }

    public String getDescription() {
        return description;
    }

    public Integer getIdentifier() {
        return identifier;
    }

    public String getName() {
        return name;
    }

标签: javajava-8enumsjava-stream

解决方案


您应该简单地添加这样的stream()方法。

public enum SortingType {

    // .....

    public static Stream<SortingType> stream() {
        return Stream.of(values());
    }
}

推荐阅读