public class Functions extends Object
java.util.function
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 Functions.rethrow(t);
}
};
By replacing a Consumer<O>
with a
FailableConsumer<O,? extends Throwable>
, this can be
written like follows:
Functions.accept((m) -> m.invoke(o,args));
Obviously, the second version is much more concise and the spirit of
Lambda expressions is met better than the second version.Modifier and Type | Class and Description |
---|---|
static interface |
Functions.FailableBiConsumer<O1,O2,T extends Throwable> |
static interface |
Functions.FailableBiFunction<I1,I2,O,T extends Throwable> |
static interface |
Functions.FailableBiPredicate<O1,O2,T extends Throwable> |
static interface |
Functions.FailableCallable<O,T extends Throwable> |
static interface |
Functions.FailableConsumer<O,T extends Throwable> |
static interface |
Functions.FailableFunction<I,O,T extends Throwable> |
static interface |
Functions.FailablePredicate<O,T extends Throwable> |
static interface |
Functions.FailableRunnable<T extends Throwable> |
static interface |
Functions.FailableSupplier<O,T extends Throwable> |
Constructor and Description |
---|
Functions() |
Modifier and Type | Method and Description |
---|---|
static <O1,O2,T extends Throwable> |
accept(Functions.FailableBiConsumer<O1,O2,T> consumer,
O1 object1,
O2 object2)
Consumes a consumer and rethrows any exception as a
RuntimeException . |
static <O,T extends Throwable> |
accept(Functions.FailableConsumer<O,T> consumer,
O object)
Consumes a consumer and rethrows any exception as a
RuntimeException . |
static <I1,I2,O,T extends Throwable> |
apply(Functions.FailableBiFunction<I1,I2,O,T> function,
I1 input1,
I2 input2)
Applies a function and rethrows any exception as a
RuntimeException . |
static <I,O,T extends Throwable> |
apply(Functions.FailableFunction<I,O,T> function,
I input)
Applies a function and rethrows any exception as a
RuntimeException . |
static <I1,I2> BiConsumer<I1,I2> |
asBiConsumer(Functions.FailableBiConsumer<I1,I2,?> consumer)
Converts the given
Functions.FailableBiConsumer into a standard BiConsumer . |
static <I1,I2,O> BiFunction<I1,I2,O> |
asBiFunction(Functions.FailableBiFunction<I1,I2,O,?> function)
Converts the given
Functions.FailableBiFunction into a standard BiFunction . |
static <I1,I2> BiPredicate<I1,I2> |
asBiPredicate(Functions.FailableBiPredicate<I1,I2,?> predicate)
Converts the given
Functions.FailableBiPredicate into a standard BiPredicate . |
static <O> Callable<O> |
asCallable(Functions.FailableCallable<O,?> callable)
Converts the given
Functions.FailableCallable into a standard Callable . |
static <I> Consumer<I> |
asConsumer(Functions.FailableConsumer<I,?> consumer)
Converts the given
Functions.FailableConsumer into a standard Consumer . |
static <I,O> Function<I,O> |
asFunction(Functions.FailableFunction<I,O,?> function)
Converts the given
Functions.FailableFunction into a standard Function . |
static <I> Predicate<I> |
asPredicate(Functions.FailablePredicate<I,?> predicate)
Converts the given
Functions.FailablePredicate into a standard Predicate . |
static Runnable |
asRunnable(Functions.FailableRunnable<?> runnable)
Converts the given
Functions.FailableRunnable into a standard Runnable . |
static <O> Supplier<O> |
asSupplier(Functions.FailableSupplier<O,?> supplier)
Converts the given
Functions.FailableSupplier into a standard Supplier . |
static <O,T extends Throwable> |
call(Functions.FailableCallable<O,T> callable)
Calls a callable and rethrows any exception as a
RuntimeException . |
static <O,T extends Throwable> |
get(Functions.FailableSupplier<O,T> supplier)
Invokes the supplier, and returns the result.
|
static RuntimeException |
rethrow(Throwable throwable)
Rethrows a
Throwable as an unchecked exception. |
static <T extends Throwable> |
run(Functions.FailableRunnable<T> runnable)
Runs a runnable and rethrows any exception as a
RuntimeException . |
static <O> Streams.FailableStream<O> |
stream(Collection<O> collection)
Converts the given collection into a
Streams.FailableStream . |
static <O> Streams.FailableStream<O> |
stream(Stream<O> stream)
Converts the given stream into a
Streams.FailableStream . |
static <O1,O2,T extends Throwable> |
test(Functions.FailableBiPredicate<O1,O2,T> predicate,
O1 object1,
O2 object2)
Tests a predicate and rethrows any exception as a
RuntimeException . |
static <O,T extends Throwable> |
test(Functions.FailablePredicate<O,T> predicate,
O object)
Tests a predicate and rethrows any exception as a
RuntimeException . |
static void |
tryWithResources(Functions.FailableRunnable<? extends Throwable> action,
Functions.FailableConsumer<Throwable,? extends Throwable> errorHandler,
Functions.FailableRunnable<? extends Throwable>... resources)
A simple try-with-resources implementation, that can be used, if your
objects do not implement the
AutoCloseable interface. |
static void |
tryWithResources(Functions.FailableRunnable<? extends Throwable> action,
Functions.FailableRunnable<? extends Throwable>... resources)
A simple try-with-resources implementation, that can be used, if your
objects do not implement the
AutoCloseable interface. |
public Functions()
public static Runnable asRunnable(Functions.FailableRunnable<?> runnable)
Functions.FailableRunnable
into a standard Runnable
.runnable
- a FailableRunnable
Runnable
public static <I> Consumer<I> asConsumer(Functions.FailableConsumer<I,?> consumer)
Functions.FailableConsumer
into a standard Consumer
.I
- the type used by the consumersconsumer
- a FailableConsumer
Consumer
public static <O> Callable<O> asCallable(Functions.FailableCallable<O,?> callable)
Functions.FailableCallable
into a standard Callable
.O
- the type used by the callablescallable
- a FailableCallable
Callable
public static <I1,I2> BiConsumer<I1,I2> asBiConsumer(Functions.FailableBiConsumer<I1,I2,?> consumer)
Functions.FailableBiConsumer
into a standard BiConsumer
.I1
- the type of the first argument of the consumersI2
- the type of the second argument of the consumersconsumer
- a failable BiConsumer
BiConsumer
public static <I,O> Function<I,O> asFunction(Functions.FailableFunction<I,O,?> function)
Functions.FailableFunction
into a standard Function
.I
- the type of the input of the functionsO
- the type of the output of the functionsfunction
- a {code FailableFunction}Function
public static <I1,I2,O> BiFunction<I1,I2,O> asBiFunction(Functions.FailableBiFunction<I1,I2,O,?> function)
Functions.FailableBiFunction
into a standard BiFunction
.I1
- the type of the first argument of the input of the functionsI2
- the type of the second argument of the input of the functionsO
- the type of the output of the functionsfunction
- a FailableBiFunction
BiFunction
public static <I> Predicate<I> asPredicate(Functions.FailablePredicate<I,?> predicate)
Functions.FailablePredicate
into a standard Predicate
.I
- the type used by the predicatespredicate
- a FailablePredicate
Predicate
public static <I1,I2> BiPredicate<I1,I2> asBiPredicate(Functions.FailableBiPredicate<I1,I2,?> predicate)
Functions.FailableBiPredicate
into a standard BiPredicate
.I1
- the type of the first argument used by the predicatesI2
- the type of the second argument used by the predicatespredicate
- a FailableBiPredicate
BiPredicate
public static <O> Supplier<O> asSupplier(Functions.FailableSupplier<O,?> supplier)
Functions.FailableSupplier
into a standard Supplier
.O
- the type supplied by the supplierssupplier
- a FailableSupplier
Supplier
public static <T extends Throwable> void run(Functions.FailableRunnable<T> runnable)
RuntimeException
.T
- the type of checked exception the runnable may throwrunnable
- The runnable to runpublic static <O,T extends Throwable> O call(Functions.FailableCallable<O,T> callable)
RuntimeException
.O
- the return type of the callableT
- the type of checked exception the callable may throwcallable
- the callable to callpublic static <O,T extends Throwable> void accept(Functions.FailableConsumer<O,T> consumer, O object)
RuntimeException
.O
- the type the consumer acceptsT
- the type of checked exception the consumer may throwconsumer
- the consumer to consumeobject
- the object to consume by consumer
public static <O1,O2,T extends Throwable> void accept(Functions.FailableBiConsumer<O1,O2,T> consumer, O1 object1, O2 object2)
RuntimeException
.O1
- the type of the first argument the consumer acceptsO2
- the type of the second argument the consumer acceptsT
- the type of checked exception the consumer may throwconsumer
- the consumer to consumeobject1
- the first object to consume by consumer
object2
- the second object to consume by consumer
public static <I,O,T extends Throwable> O apply(Functions.FailableFunction<I,O,T> function, I input)
RuntimeException
.I
- the type of the argument the function acceptsO
- the return type of the functionT
- the type of checked exception the function may throwfunction
- the function to applyinput
- the input to apply function
onpublic static <I1,I2,O,T extends Throwable> O apply(Functions.FailableBiFunction<I1,I2,O,T> function, I1 input1, I2 input2)
RuntimeException
.I1
- the type of the first argument the function acceptsI2
- the type of the second argument the function acceptsO
- the return type of the functionT
- the type of checked exception the function may throwfunction
- the function to applyinput1
- the first input to apply function
oninput2
- the second input to apply function
onpublic static <O,T extends Throwable> boolean test(Functions.FailablePredicate<O,T> predicate, O object)
RuntimeException
.O
- the type of argument the predicate testsT
- the type of checked exception the predicate may throwpredicate
- the predicate to testobject
- the input to test by predicate
public static <O1,O2,T extends Throwable> boolean test(Functions.FailableBiPredicate<O1,O2,T> predicate, O1 object1, O2 object2)
RuntimeException
.O1
- the type of the first argument the predicate testsO2
- the type of the second argument the predicate testsT
- the type of checked exception the predicate may throwpredicate
- the predicate to testobject1
- the first input to test by predicate
object2
- the second input to test by predicate
public static <O,T extends Throwable> O get(Functions.FailableSupplier<O,T> supplier)
O
- The suppliers output type.T
- The type of checked exception, which the supplier can throw.supplier
- The supplier to invoke.public static <O> Streams.FailableStream<O> stream(Stream<O> stream)
Streams.FailableStream
. The
Streams.FailableStream
consists of the same elements, than the
input stream. However, failable lambdas, like
Functions.FailablePredicate
, Functions.FailableFunction
, and
Functions.FailableConsumer
may be applied, rather than
Predicate
, Function
, Consumer
, etc.O
- The streams element type.stream
- The stream, which is being converted into a
Streams.FailableStream
.Streams.FailableStream
.public static <O> Streams.FailableStream<O> stream(Collection<O> collection)
Streams.FailableStream
.
The Streams.FailableStream
consists of the collections
elements. Shortcut for
Functions.stream(collection.stream());
O
- The collections element type. (In turn, the result
streams element type.)collection
- The collection, which is being converted into a
Streams.FailableStream
.Streams.FailableStream
.@SafeVarargs public static void tryWithResources(Functions.FailableRunnable<? extends Throwable> action, Functions.FailableConsumer<Throwable,? extends Throwable> errorHandler, Functions.FailableRunnable<? extends Throwable>... resources)
AutoCloseable
interface. The method
executes the action
. The method guarantees, that all
the resources
are being executed, in the given order, afterwards,
and regardless of success, or failure. If either the original action, or
any of the resource action fails, then the first failure (aka
Throwable
is rethrown. Example use:
final FileInputStream fis = new FileInputStream("my.file");
Functions.tryWithResources(useInputStream(fis), null, () -> fis.close());
action
- The action to execute. This object will always
be invoked.errorHandler
- An optional error handler, which will be invoked finally,
if any error occurred. The error handler will receive the first
error, aka Throwable
.resources
- The resource actions to execute. All resource
actions will be invoked, in the given order. A resource action is an
instance of Functions.FailableRunnable
, which will be executed.tryWithResources(FailableRunnable, FailableRunnable...)
@SafeVarargs public static void tryWithResources(Functions.FailableRunnable<? extends Throwable> action, Functions.FailableRunnable<? extends Throwable>... resources)
AutoCloseable
interface. The method
executes the action
. The method guarantees, that all
the resources
are being executed, in the given order, afterwards,
and regardless of success, or failure. If either the original action, or
any of the resource action fails, then the first failure (aka
Throwable
is rethrown. Example use:
final FileInputStream fis = new FileInputStream("my.file");
Functions.tryWithResources(useInputStream(fis), () -> fis.close());
action
- The action to execute. This object will always
be invoked.resources
- The resource actions to execute. All resource
actions will be invoked, in the given order. A resource action is an
instance of Functions.FailableRunnable
, which will be executed.tryWithResources(FailableRunnable, FailableConsumer, FailableRunnable...)
public static RuntimeException rethrow(Throwable throwable)
Rethrows a Throwable
as an unchecked exception. If the argument is
already unchecked, namely a RuntimeException
or Error
then
the argument will be rethrown without modification. If the exception is
IOException
then it will be wrapped into a UncheckedIOException
.
In every other cases the exception will be wrapped into a UndeclaredThrowableException
Note that there is a declared return type for this method, even though it never returns. The reason for that is to support the usual pattern:
throw rethrow(myUncheckedException);
instead of just calling the method. This pattern may help the Java compiler to
recognize that at that point an exception will be thrown and the code flow
analysis will not demand otherwise mandatory commands that could follow the
method call, like a return
statement from a value returning method.
throwable
- The throwable to rethrow ossibly wrapped into an unchecked exceptionCopyright © 2001–2020 The Apache Software Foundation. All rights reserved.