Как сопоставить список с набором при применении метода (преобразование кода Java в Kotlin)?

У меня есть этот фрагмент кода на Java (это MCVE; реальный код сложнее, но имеет ту же проблему):

enum StatusEnum { A, B, C; }

[...]

final static Set<String> names = Arrays.asList(StatusEnum.values())
        .stream().map(StatusEnum::name).collect(Collectors.toSet());

IntelliJ дал мне следующее автоматическое преобразование в Kotlin:

    internal val names = Arrays.asList(*StatusEnum.values())
        .stream().map<String>(Function<StatusEnum, String> { it.name })
        .collect<Set<String>, Any>(Collectors.toSet())

К сожалению, это имеет ошибки компиляции:

  • Функция интерфейса не имеет конструкторов
  • Ошибка определения типа. Ожидаемое несоответствие типов: предполагаемый тип — Collector!>! но Коллектор!>! ожидалось
  • Неразрешенная ссылка: это

Это моя самая первая попытка конвертировать код в Kotlin. Я просмотрел раздел документации Функции и лямбда-выражения. До сих пор не ясно, что здесь происходит и как это исправить.


person Alex R    schedule 15.09.2019    source источник


Ответы (1)


Используйте методы Kotlin вместо потоков Java:

val names = StatusEnum.values()
    .map { it.name }
    .toSet()
person jsamol    schedule 15.09.2019