Почему неверный тип возврата

строка .flatMap (WordsUtil :: getWords) является ошибкой - неверный тип возврата в ссылке на метод: cannot convert java.util.List<java.lang.String> to java.util.Iterator<U>

return lines.map(String::toLowerCase)
              .flatMap(WordsUtil::getWords)
              .mapToPair(w -> new Tuple2<>(w, 1))
              .reduceByKey((a, b) -> a + b)
              .mapToPair(Tuple2::swap)
              .sortByKey(false).map(Tuple2::_2).take(topX);

Кодовый метод:

 public static List<String> getWords(String line) {
    List<String> words = new ArrayList<>();
    BreakIterator breakIterator = BreakIterator.getWordInstance();
    breakIterator.setText(line);
    int lastIndex = breakIterator.first();
    while (BreakIterator.DONE != lastIndex) {
        int firstIndex = lastIndex;
        lastIndex = breakIterator.next();
        if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(line.charAt(firstIndex))) {
            words.add(line.substring(firstIndex, lastIndex));
        }
    }

    return words;
}

почему у меня эта ошибка?

Прочтите сообщение об ошибке: Bad return type in method reference: cannot convert java.util.List<java.lang.String> to java.util.Iterator<U>. Итак, что должен вернуть указанный метод (WordsUtil :: getWords)? Что это возвращает?

JB Nizet 25.10.2018 21:38

я вижу List <String>, хорошо, но почему это правильно? github.com/Jeka1978/spark-training-kiev-2016/blob/master/src‌ /…

user5596838 25.10.2018 21:40

Скорее всего, потому что код, с которым вы связались, использует старую версию Spark, где тип возврата был Iterable (который является List), а не Iterator. См. spark.apache.org/docs/1.6.3/api/java/org/apache/spark/api/ja‌ va /…

JB Nizet 25.10.2018 21:43

да (в примере с использованием spark-core_2.10, и я использую версию 2.3.2 (

user5596838 25.10.2018 21:45

@Alexandr пример, на который вы указываете, использует Spark 1.6.1. См. github.com/Jeka1978/spark-training-kiev-2016/blob/master/…

DragonAssassin 25.10.2018 22:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция плоской карты должна возвращать итератор:

.flatMap(w -> WordsUtil.getWords(w).iterator())

но почему это правильно? github.com/Jeka1978/spark-training-kiev-2016/blob/master/src‌ /…

user5596838 25.10.2018 21:41

Другие вопросы по теме