我有一个枚举值的列表,需要将它们转换为由某个字符分隔的单个字符串。
enum Level {
LOW,
MEDIUM,
HIGH
}
Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));
期望结果:
String result = "LOW, HIGH"
枚举类型是否有对应的String.join
方法?
我有一个枚举值的列表,需要将它们转换为由某个字符分隔的单个字符串。
enum Level {
LOW,
MEDIUM,
HIGH
}
Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));
String result = "LOW, HIGH"
枚举类型是否有对应的String.join
方法?
enum Levels {
LOW, MEDIUM, HIGH;
}
...
String s = EnumSet.allOf(Levels.class).stream().map(Enum::toString).collect(Collectors.joining(","));
// EnumSet.of(Levels.LOW, Levels.HIGH) if you want some specific enums
System.out.println(s);
LOW,MEDIUM,HIGH
目前尚无用于枚举的Strings.join方法,但您可以将级别集合映射为字符串,然后加以连接。例如:
levels.stream().map(Enum::toString).collect(Collectors.joining(","))
如果使用您原来的设置,将会产生以下结果:
jshell> enum Level {
...> LOW,
...> MEDIUM,
...> HIGH
...> }
| created enum Level
jshell> Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));
levels ==> [LOW, HIGH]
jshell> levels.stream().map(Enum::toString).collect(Collectors.joining(","))
$3 ==> "LOW,HIGH"
Set<LevelsEnum> levels = new HashSet<>(Arrays.asList(LevelsEnum.LOW, LevelsEnum.HIGH));
String result = levels.stream()
.map(LevelsEnum::toString)
.collect(Collectors.joining(","));
System.out.println(result);
我认为你需要以某种方式调用你的enum Levels
的toString()
方法,可能是通过HashSet.stream()
这样的方式:
public static void main(String[] args) {
Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));
List<String> levelStrings = levels.stream()
.map(Level::toString)
.collect(Collectors.toList());
String result = String.join(", ", levelStrings);
System.out.println(result);
}
输出:
LOW, HIGH