С комментарий :
Я на самом деле вызываю сторонний метод, который возвращает List
Затем приведите значение к List<Object>
или List<?>
( спасибо, Шон Ван Гордер ) , так что оно больше не является raw универсальным, и код потока будет работать:
List<?> list = thirdPartyMethod();
List<String> strings = list.stream()
.map(object -> Objects.toString(object, null))
.collect(Collectors.toList());
Логически, нет никакой разницы между List
и List<Object>
, но есть большая разница с компилятором, потому что raw generic вызывает режим обратной совместимости в компиляторе, где все генерики игнорируются, из-за чего вся цепочка потоков ведет себя плохо.