Мне нужно создать исключение внутри лямбды, и я не знаю, как это сделать.
Вот мой код:
listOfProducts
.stream()
.filter(product -> product.getProductId().equalsIgnoreCase(productId))
.filter(product -> product == null) //like if(product==null) throw exception
.findFirst()
.get()
Я понятия не имею, как это сделать. Есть ли способ сделать это, или я просто обхожу это, применяя фильтр, чтобы фильтр не передавал нулевое значение, например filter(product->product!=null)
(даже подсказка будет полезна :))
Редактировать Фактический вопрос: мне нужен продукт, и если он равен нулю, он выдаст исключение, в противном случае он будет пройден, он не упоминается в Лямбда-функция Java 8, которая выдает исключение?
Код, который я пытаюсь реорганизовать,
for(Product product : listOfProducts) {
if(product!=null && product.getProductId()!=null &&
product.getProductId().equals(productId)){
productById = product;
break;
}
}
if(productById == null){
throw new IllegalArgumentException("No products found with the
product id: "+ productId);
}
У меня есть другое возможное решение, как
public Product getProductById(String productId) {
Product productById = listOfProducts.stream()
.filter(product -> product.getProductId().equalsIgnoreCase(productId)).findFirst().get();
if (productById == null)
throw new IllegalArgumentException("product with id " + productId + " not found!");
return productById;
}
Но я хочу решить это с помощью функционального интерфейса, и будет хорошо, если я смогу добиться этого, используя одну строку в этом методе, например
...getProductById()
return stream...get();
и если мне нужно объявить собственный метод для объявления исключения, это не будет проблемой
null
и завершится ошибкой только в том случае, если нет соответствующего элемента (неnull
), тогда как этот код немедленно завершится ошибкой, если перед совпадением встретит значениеnull
. Вы должны решить, должны лиnull
быть разрешены вlistOfProducts
или нет. 05.09.2016listOfProducts.stream() .filter(product -> product.getProductId().equalsIgnoreCase(productId)) .filter(product -> product != null).findFirst() .orElseThrow(() -> new IllegalArgumentException("product not found " + productId));
надеюсь, что это заблокирует нулевое значение 05.09.2016null
перед другим, иначе попытка вызватьproduct.getProductId()
уже вызоветNullPointerException
, если поток встретитnull
. 05.09.2016