У меня есть потоковая операция (Java 8), которая предназначена для разбивки набора строк на двойные и получения суммы. Некоторые строки пусты, но я не верю, что они пустые. Я добавил операцию filter
, чтобы отфильтровать пустые, прежде чем они достигнут Double.parseDouble()
, где они могут вызвать ошибку, но фильтр, похоже, не работает.
Мой код:
double myTotal= myObjectList.stream()
.map(myObject::getAmount)
.peek( s -> System.out.println("before filter: " + s) )
.filter( s -> !s.isEmpty() )
.peek( s -> System.out.println("after filter: " + s) )
.mapToDouble(Double::parseDouble)
.reduce(0D,Double::sum);
Это JSP, а JSP не компилируется. Согласно странице ошибки, исключение возникает в последней строке (.reduce(0D,Double::sum);
), но «root причина» - это «java.lang.NumberFormatException: empty String
» - Double.parseDouble()
обнаруживает пустые строки.
Я пробовал несколько перестановок операции filter
, в том числе некоторые, которые проверяли на нулевое значение, и некоторые, которые проверяли !s.equals("")
и тому подобное. Я добавил операции peek
для отладки, и стало ясно, что пустая строка печатается как до , так и после filter
строки.
Что такое Я делаю не так? Есть ли лучший способ отфильтровать значения, которые не могут быть проанализированы с удвоениями?