Package org.apache.commons.lang3.stream
Class Streams
java.lang.Object
org.apache.commons.lang3.stream.Streams
Provides utility functions, and classes for working with the
java.util.stream package, or more generally, with Java 8 lambdas. More
specifically, it attempts to address the fact that lambdas are supposed
not to throw Exceptions, at least not checked Exceptions, AKA instances
of Exception. This enforces the use of constructs like
Consumer<java.lang.reflect.Method> consumer = m -> {
try {
m.invoke(o, args);
} catch (Throwable t) {
throw Failable.rethrow(t);
}
};
stream.forEach(consumer);
Using a Streams.FailableStream, this can be rewritten as follows:
Streams.failable(stream).forEach((m) -> m.invoke(o, args));
Obviously, the second version is much more concise and the spirit of
Lambda expressions is met better than in the first version.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classA Collector type for arrays.static classA reduced, and simplified version of aStreamwith failable method signatures. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <O> Streams.FailableStream<O>stream(Collection<O> stream) Converts the givenCollectioninto aStreams.FailableStream.static <O> Streams.FailableStream<O>Converts the givenstreaminto aStreams.FailableStream.static <O> Collector<O,?, O[]> Returns aCollectorthat accumulates the input elements into a new array.
-
Constructor Details
-
Streams
public Streams()
-
-
Method Details
-
stream
Converts the givenCollectioninto aStreams.FailableStream. This is basically a simplified, reduced version of theStreamclass, with the same underlying element stream, except that failable objects, likeFailablePredicate,FailableFunction, orFailableConsumermay be applied, instead ofPredicate,Function, orConsumer. The idea is to rewrite a code snippet like this:final List<O> list; final Method m; final Function<O, String> mapper = (o) -> { try { return (String) m.invoke(o); } catch (Throwable t) { throw Failable.rethrow(t); } }; final List<String> strList = list.stream().map(mapper).collect(Collectors.toList());as follows:final List<O> list; final Method m; final List<String> strList = Failable.stream(list.stream()).map((o) -> (String) m.invoke(o)) .collect(Collectors.toList());While the second version may not be quite as efficient (because it depends on the creation of additional, intermediate objects, of type FailableStream), it is much more concise, and readable, and meets the spirit of Lambdas better than the first version.- Type Parameters:
O- The streams element type.- Parameters:
stream- The stream, which is being converted.- Returns:
- The
Streams.FailableStream, which has been created by converting the stream.
-
stream
Converts the givenstreaminto aStreams.FailableStream. This is basically a simplified, reduced version of theStreamclass, with the same underlying element stream, except that failable objects, likeFailablePredicate,FailableFunction, orFailableConsumermay be applied, instead ofPredicate,Function, orConsumer. The idea is to rewrite a code snippet like this:final List<O> list; final Method m; final Function<O, String> mapper = (o) -> { try { return (String) m.invoke(o); } catch (Throwable t) { throw Failable.rethrow(t); } }; final List<String> strList = list.stream().map(mapper).collect(Collectors.toList());as follows:final List<O> list; final Method m; final List<String> strList = Failable.stream(list.stream()).map((o) -> (String) m.invoke(o)) .collect(Collectors.toList());While the second version may not be quite as efficient (because it depends on the creation of additional, intermediate objects, of type FailableStream), it is much more concise, and readable, and meets the spirit of Lambdas better than the first version.- Type Parameters:
O- The streams element type.- Parameters:
stream- The stream, which is being converted.- Returns:
- The
Streams.FailableStream, which has been created by converting the stream.
-
toArray
Returns aCollectorthat accumulates the input elements into a new array.- Type Parameters:
O- the type of the input elements- Parameters:
pElementType- Type of an element in the array.- Returns:
- a
Collectorwhich collects all the input elements into an array, in encounter order
-