Java 使用流不';从枚举中收集值;行不通

Java 使用流不';从枚举中收集值;行不通,java,java-8,enums,java-stream,Java,Java 8,Enums,Java Stream,我想要一个包含枚举中几乎所有值的列表。我试图在stream的帮助下做到这一点,但我不知道为什么它不起作用 例如,我尝试这样做: SortingType.stream() // .filter(d -> !d.getName().equals(SortingType.UNKNOWN.getName())) .forEach(u -> { sortingList.add(createSortingBE(lo

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

例如,我尝试这样做:

 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;
    }

您只需像这样添加
stream()
方法

public enum SortingType {

    // .....

    public static Stream<SortingType> stream() {
        return Stream.of(values());
    }
}
公共枚举排序类型{
// .....
公共静态流(){
返回流.of(value());
}
}

使用
排序类型.值()
。。。干杯,因为在排序类型中没有
stream()
方法。您正确发布的代码使用了两次
Stream.of(values())
,那么问题发生在哪里?除此之外,您的
getName()
方法已经过时,
enum
类型已经有了一个
name()
方法,该方法返回常量的名称,还有类似
的谓词!d、 getName().equals(SortingType.UNKNOWN.getName())
不必要地复杂,只需使用
d!=排序类型。未知
。更奇怪的是
u.name().equalsIgnoreCase(sortingType.name())
,因为它表明你知道
name()
,但是为什么
equalsIgnoreCase
而不是
equals
?@new\u在编程中读了上面所写的美女@holger。还要检查java文档中的
Enum.class
。祝你好运。你可能想要:
EnumSet.complementOf(EnumSet.of(SortingType.UNKNOWN)).stream()
@new\u在\u编程中,我建议先阅读并理解一下API,而不是仅仅复制一些代码并进行尝试和错误更改。