Java 8 使用枚举的方法

标签 java enums java-8

我想知道在 Java 8 中处理枚举的所有值的最佳方法是什么。特别是当您需要获取所有值并将其添加到某个地方时,例如,假设我们有以下枚举:

public enum Letter {
 A, B, C, D;
}

我当然可以这样做:

for (Letter l : Letter.values()) {
    foo(l);
}

但是,我还可以在枚举定义中添加以下方法:

public static Stream<Letter> stream() {
    return Arrays.stream(Letter.values());
}

然后将上面的 for 替换为:

Letter.stream().forEach(l -> foo(l));

这种方法是否可行,还是在设计或性能方面存在一些问题?此外,为什么枚举没有 stream() 方法?

最佳答案

我会选择 EnumSet .因为 forEach() 也是在 Iterable 上定义的,所以您可以完全避免创建流:

EnumSet.allOf(Letter.class).forEach(x -> foo(x));

或者带有方法引用:

EnumSet.allOf(Letter.class).forEach(this::foo);

不过,老式的 for 循环感觉有点简单:

for (Letter x : Letter.values()) {
    foo(x);
}

关于Java 8 使用枚举的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922296/

相关文章:

java - 使用 Play! 渲染一个简单的静态 JSON 响应!和 java

c++ - 结构中的枚举

c# - 如何在 C# 中检索枚举值作为字符串

java - Wildfly Mail-Session 始终使用本地主机

Java,顺序流在哪个线程中执行?

java - 我怎样才能将java exe提取到jar

java - 验证列表: prefer explicit IllegalArgumentException over automatic ArrayIndexOutOfBounds?

java - 在 AEM 中使用 MagickQuick 进行图像压缩

vb6 - VB6 中的标志没有返回正确的值

java - Maven : Deploy Local Project to Remote Server with dependencies