Java将枚举列表连接到字符串

use*_*985 3 java enums concatenation

有一个枚举值列表,我需要将它转换为由某个字符分隔的单个字符串。

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));
Run Code Online (Sandbox Code Playgroud)

预期结果:

String result = "LOW, HIGH"
Run Code Online (Sandbox Code Playgroud)

有String.join枚举吗?

Mar*_*nik 7

这是一个可能的版本(Java 8+)


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);
Run Code Online (Sandbox Code Playgroud)

结果是:

LOW,MEDIUM,HIGH
Run Code Online (Sandbox Code Playgroud)


w08*_*08r 6

没有用于枚举的 Strings.join,但您可以将级别集映射到字符串中,然后连接它们,例如:

levels.stream().map(Enum::toString).collect(Collectors.joining(","))
Run Code Online (Sandbox Code Playgroud)

会产生(与你原来的设置)

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"
Run Code Online (Sandbox Code Playgroud)