【问题标题】:Java concatenate List of enum to StringJava将枚举列表连接到字符串
【发布时间】:2020-01-08 09:24:59
【问题描述】:

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

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

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

预期结果:

String result = "LOW, HIGH"

枚举有String.join吗?

【问题讨论】:

标签: java enums concatenation


【解决方案1】:

这是一个可能的版本(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

【讨论】:

    【解决方案2】:

    没有用于枚举的 Strings.join,因此,您可以将一组级别映射到 Strings 中,然后将它们连接起来,例如:

    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"
    

    【讨论】:

    • 答案不应该只是代码,请提供实际操作的摘要,以便其他用户了解正在发生的事情。
    • 好多了,它只是帮助别人理解你的代码是做什么的;仅此而已;对刚开始 +1 的人特别有帮助
    【解决方案3】:

    我认为你必须以某种方式调用你的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
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

      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);
      

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 2018-10-04
        相关资源
        最近更新 更多