我想知道在 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/