Java объединить список перечисления в строку - PullRequest
0 голосов
/ 08 января 2020

Имея список значений перечисления, мне нужно преобразовать его в одну строку, разделенную некоторым символом.

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

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

Ожидаемый результат:

String result = "LOW, HIGH"

Есть ли String.join для перечисления?

Ответы [ 4 ]

4 голосов
/ 08 января 2020

Вот одна из возможных версий (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 голосов
/ 08 января 2020

String.join для enum не существует, как таковой, но вы можете отобразить набор уровней в 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"
0 голосов
/ 08 января 2020

Вы можете сделать так:

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 голосов
/ 08 января 2020

Я думаю, вам нужно как-то вызвать метод toString() вашего enum Levels, возможно, с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...