public static StreamEx<String> ofLines(BufferedReader reader) {
        return new StreamEx<>(reader.lines(), StreamContext.SEQUENTIAL);
    }
public static StreamEx < String > ofLines ( BufferedReader reader ) { return new StreamEx < > ( reader . lines ( ) , StreamContext . SEQUENTIAL ) ; }
Returns a {@code StreamEx}, the elements of which are lines read from the
supplied {@link BufferedReader}. The {@code StreamEx} is lazily
populated, i.e., read only occurs during the terminal stream operation.

<p>
The reader must not be operated on during the execution of the terminal
stream operation. Otherwise, the result of the terminal stream operation
is undefined.

<p>
After execution of the terminal stream operation there are no guarantees
that the reader will be at a specific position from which to read the
next character or line.

<p>
If an {@link IOException} is thrown when accessing the underlying
{@code BufferedReader}, it is wrapped in an {@link UncheckedIOException}
which will be thrown from the {@code StreamEx} method that caused the
read to take place. This method will return a StreamEx if invoked on a
BufferedReader that is closed. Any operation on that stream that requires
reading from the BufferedReader after it is closed, will cause an
UncheckedIOException to be thrown.

@param reader the reader to get the lines from
@return a {@code StreamEx<String>} providing the lines of text described
by supplied {@code BufferedReader}
@see BufferedReader#lines()