Introduction
This article will shortly explain exception handling during streaming in Java. An exception can occur at any time during the processing of the stream, e.g. while mapping, reducing, or collecting to list.
Try Catch
One way to handle exceptions in a stream pipeline is to use the try-catch
block to catch the exception and handle it appropriately. For example, let’s say we have a list of integers and we want to find the maximum value in the list, but there’s a chance that the list might be empty. We can use the try-catch
block to catch the NoSuchElementException
that’s thrown by the max()
method when the stream is empty
In this example, we use the max()
method to find the maximum value in the stream, and then call the get()
method to retrieve the value. If the stream is empty, the NoSuchElementException
is thrown and caught in the catch
block, where we print a message indicating that the list is empty.
Lambda Expressions
Another way to handle exceptions in a stream is to use a lambda expression with a try-catch
block. For example, let’s say we have a list of file names and we want to read the contents of each file and print them to the console. We can use a lambda expression to read the contents of each file and catch any IOException
that’s throw
In this example, we use the forEach()
method to iterate over the list of file names, and pass a lambda expression that reads the contents of each file and prints them to the console. If an IOException
is thrown while reading a file, the exception is caught in the catch
block, where we print a message indicating that an error occurred while reading the file.
Optional
One way to handle exceptions in Java streams is to use the Optional
class. The Optional
class is a container object that may or may not contain a value, and it’s designed to help avoid NullPointerExceptions
when working with objects that may be null
Here we filter for Strings with lengths of more than 10. Since we don’t find any Object here, an empty Optional
is returned. Therefore our method orElse will return a default String for us.