Сбор карт с использованием потока приводит к странной ошибке компиляции - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть этот метод:

 public void fields(TableField... s){
    // compilation error on next line
    Collection<String> fields = Arrays.asList(s).stream().map(v -> v.getValue());
    this.fields.addAll(fields);
  }

и TableField просто выглядит просто:

class TableField {
  public String getKey() {
    return this.key;
  }

  public String getValue() {
    return this.value;
  }
}

но я вижу эту ошибку компиляции:

Несовместимые типы.Обязательная коллекция, но «карта» была выведена для потока: не существует экземпляра (ов) типа переменной (ей) R, поэтому поток соответствует коллекции

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

map возвращает преобразованный Stream.Если вы хотите коллекцию, вам нужно собрать поток.Например:

Collection<String> fields =
    Arrays.asList(s).stream().map(v -> v.getValue()).collect(Collectors.toList());
0 голосов
/ 13 февраля 2019

Нет смысла использовать потоки здесь.Просто традиционный цикл for даст более сжатый и намного более производительный код:

for (v : s) fields.add(v.getValue());
0 голосов
/ 13 февраля 2019

Вам нужно collect элементы там и, следовательно, тип будет выведен:

Collection<String> fields = Arrays.stream(s) //  Arrays.asList(s).stream()
        .map(TableField::getValue) // map(v -> v.getValue())
        .collect(Collectors.toList()); // or any other collection using 'Collectors.toCollection(<type>::new)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...