有没有Java 8方法或易于的方式,可以将枚举值作为字符串列表返回,例如:
List<String> sEnum = getEnumValuesAsString();
有没有Java 8方法或易于的方式,可以将枚举值作为字符串列表返回,例如:
List<String> sEnum = getEnumValuesAsString();
您可以在Java 8之前这样做:
List<Enum> enumValues = Arrays.asList(Enum.values());
或者List<Enum> enumValues = new ArrayList<Enum>(EnumSet.allOf(Enum.class));
使用Java 8功能,您可以将每个常量映射到其名称:
List<String> enumNames = Stream.of(Enum.values())
.map(Enum::name)
.collect(Collectors.toList());
Stream.of
或 Arrays.stream
来稍微缩短 asList(...).stream()
的写法。 - Radiodefparallel
可以显著地降低性能;并行化操作有一个代价,并不总是能够抵消它所带来的收益。 - Louis Wasserman.collect(Collectors.joining(", "))
。 - Noumenon你也可以按照以下方式进行操作
public enum DAY {MON, TUES, WED, THU, FRI, SAT, SUN};
EnumSet.allOf(DAY.class).stream().map(e -> e.name()).collect(Collectors.toList())
或者EnumSet.allOf(DAY.class).stream().map(DAY::name).collect(Collectors.toList())
我发现这个问题的主要原因是我想编写一个通用验证器,以验证给定的字符串枚举名称是否适用于给定的枚举类型(分享以便任何人发现有用)。@SuppressWarnings({ "unchecked", "rawtypes" })
public static void isValidEnumsValid(Class clazz, Set<String> enumNames) {
Set<String> notAllowedNames = enumNames.stream()
.filter(enumName -> !EnumUtils.isValidEnum(clazz, enumName))
.collect(Collectors.toSet());
if (notAllowedNames.size() > 0) {
String validEnumNames = (String) EnumUtils.getEnumMap(clazz).keySet().stream()
.collect(Collectors.joining(", "));
throw new IllegalArgumentException("The requested values '" + notAllowedNames.stream()
.collect(Collectors.joining(",")) + "' are not valid. Please select one more (case-sensitive) "
+ "of the following : " + validEnumNames);
}
}
我太懒了,不想写一个枚举注释验证器,就像这里所示https://dev59.com/lGMl5IYBdhLWcg3wr4rn#51109419
public enum DAY {MON, TUES, WED, THU, FRI, SAT, SUN};
String[] days = Stream.of(DAY.values()).map(Enum::name).toArray(String[]::new);