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

4

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

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

Set<Level> levels = new HashSet<>(Arrays.asList(Level.LOW, Level.HIGH));

期望结果:
String result = "LOW, HIGH"

枚举类型是否有对应的String.join方法?


这个回答解决了你的问题吗?Java:将List<String>转换为String - luk2302
这个回答解决了您的问题吗?如何将枚举中的所有名称作为String[]获取? - Julien Lopez
4个回答

10
以下是可能的一种版本(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);

结果是:
LOW,MEDIUM,HIGH

6

目前尚无用于枚举的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"

答案不应只是代码,请提供对正在发生的事情的摘要,以便其他用户可以理解。 - Popeye
更好的是,这只是帮助其他人理解你的代码而已;对于那些刚开始学习的人来说尤其有帮助 +1 - Popeye

0
你可以这样做:
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);

0

我认为你需要以某种方式调用你的enum LevelstoString()方法,可能是通过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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接