Вы правы, это необработанный тип:
List newList = iList.stream().filter(p).filter(x>x>3).collect(Collectors.toList());
System.out.println(newList);
Однако необработанные типы являются абсолютно допустимыми и не вызовут ошибки компиляции.Они просто очень плохая практика для использования.Это демонстрируется вашим вторым фрагментом кода:
List iList= Arrays.asList(1,2,3,4,5,6,7);
iList.stream().filter(x -> x%2 ==0).filter(x -> x>3).collect(Collectors.toList());
Здесь, поскольку iList
является необработанным типом, компилятор не знает, что iList
содержит int
и обрабатывает их как объекты,поэтому вы не можете использовать оператор %
здесь.Фактическая ошибка, которую я получаю:
bad operand types for binary operator '%'
first type: Object
second type: int
bad operand types for binary operator '>'
first type: Object
second type: int
Обратите внимание, что это игнорирует синтаксическую ошибку в ваших лямбдах.Правильный синтаксис: x -> x > 3
, а не x>x>3