Я ожидал, что смогу использовать Stream:: flatMap, как это
public static List<String> duplicate(String s) {
List<String> l = new ArrayList<String>();
l.add(s);
l.add(s);
return l;
}
listOfStrings.stream().flatMap(str -> duplicate(str)).collect(Collectors.toList());
Но я получаю следующую ошибку компилятора
Test.java:25: ошибка: несовместимые типы: не может вызывать переменную типа (ов) R listOfStrings.stream(). FlatMap (str → duplicate (str)). Collect (Collectors.toList());
(несоответствие аргументов, неправильный тип возврата в выражении лямбда Список не может быть преобразован в Stream)
где R, T - переменные типа: R extends Объект, объявленный в методе flatMap (Function > ) T extends Объект, объявленный в интерфейсе Stream
В scala я могу сделать то, что, как я считаю, эквивалентно
scala> List(1,2,3).flatMap(duplicate(_))
res0: List[Int] = List(1, 1, 2, 2, 3, 3)
Почему это не допустимое использование flatMap в java?