Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* JBoss, Home of Professional Open Source.
* Copyright 2017 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wildfly.common.function;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.DoubleFunction;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.function.LongFunction;
import java.util.function.ObjDoubleConsumer;
import java.util.function.ObjIntConsumer;
import java.util.function.ObjLongConsumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.function.ToDoubleBiFunction;
import java.util.function.ToDoubleFunction;
import java.util.function.ToIntBiFunction;
import java.util.function.ToIntFunction;
import java.util.function.ToLongBiFunction;
import java.util.function.ToLongFunction;
import org.jboss.logging.Logger;
import org.wildfly.common.Assert;
/**
* A set of utility methods which return common functions.
*/
public final class Functions {
private Functions() {}
private static final Logger LOGGER = Logger.getLogger(Functions.class);
private static final Consumer CLOSING_CONSUMER = quiet(AutoCloseable::close, exceptionLoggingConsumer());
/**
* Returns a consumer that quietly closes its argument, logging any exceptions.
* @return a closing consumer
*/
@SuppressWarnings("unchecked")
public static Consumer closingConsumer() {
return (Consumer) CLOSING_CONSUMER;
}
private static final Consumer EXCEPTION_LOGGER = new Consumer() {
@Override
public void accept(Exception e) {
LOGGER.warn(e.getLocalizedMessage(), e);
}
};
/**
* Returns a consumer that logs its exception parameter as a warning.
* @param the exception type
* @return an exception consumer
*/
@SuppressWarnings("unchecked")
public static Consumer exceptionLoggingConsumer() {
return (Consumer) EXCEPTION_LOGGER;
}
/**
* Returns a consumer that wraps and throws its exception parameter as a {@link RuntimeException}.
* @param the exception type
* @return an exception consumer
*/
public static Consumer runtimeExceptionThrowingConsumer(Function runtimeExceptionWrapper) {
return new Consumer() {
@Override
public void accept(E exception) {
throw runtimeExceptionWrapper.apply(exception);
}
};
}
/**
* Converts an {@link ExceptionConsumer} to a standard {@link Consumer} using the specified exception handler.
* @param the parameter type of the consumer
* @param the exception type
* @param consumer an exception consumer
* @param exceptionHandler an exception handler
* @return a standard consumer
*/
public static Consumer quiet(ExceptionConsumer consumer, Consumer exceptionHandler) {
return new Consumer() {
@SuppressWarnings("unchecked")
@Override
public void accept(T value) {
try {
consumer.accept(value);
} catch (Exception e) {
exceptionHandler.accept((E) e);
}
}
};
}
/**
* Converts an {@link ExceptionBiConsumer} to a standard {@link BiConsumer} using the specified exception handler.
* @param the first parameter type of the consumer
* @param the second parameter type of the consumer
* @param the exception type
* @param consumer a binary exception consumer
* @param exceptionHandler an exception handler
* @return a standard binary consumer
*/
public static BiConsumer quiet(ExceptionBiConsumer consumer, Consumer exceptionHandler) {
return new BiConsumer() {
@SuppressWarnings("unchecked")
@Override
public void accept(T value1, U value2) {
try {
consumer.accept(value1, value2);
} catch (Exception e) {
exceptionHandler.accept((E) e);
}
}
};
}
/**
* Converts an {@link ExceptionObjIntConsumer} to a standard {@link ObjIntConsumer} using the specified exception handler.
* @param the first parameter type of the consumer
* @param the exception type
* @param consumer an object/int exception consumer
* @param exceptionHandler an exception handler
* @return a standard object/int consumer
*/
public static ObjIntConsumer quiet(ExceptionObjIntConsumer consumer, Consumer exceptionHandler) {
return new ObjIntConsumer() {
@SuppressWarnings("unchecked")
@Override
public void accept(T object, int i) {
try {
consumer.accept(object, i);
} catch (Exception e) {
exceptionHandler.accept((E) e);
}
}
};
}
/**
* Converts an {@link ExceptionObjLongConsumer} to a standard {@link ObjLongConsumer} using the specified exception handler.
* @param the first parameter type of the consumer
* @param the exception type
* @param consumer an object/long exception consumer
* @param exceptionHandler an exception handler
* @return a standard object/long consumer
*/
public static ObjLongConsumer quiet(ExceptionObjLongConsumer consumer, Consumer exceptionHandler) {
return new ObjLongConsumer() {
@SuppressWarnings("unchecked")
@Override
public void accept(T object, long i) {
try {
consumer.accept(object, i);
} catch (Exception e) {
exceptionHandler.accept((E) e);
}
}
};
}
/**
* Get the singleton consumer which accepts and runs runnable instances.
*
* @return the runnable consumer
*/
public static Consumer runnableConsumer() {
return RunnableConsumer.INSTANCE;
}
/**
* Get the singleton exception consumer which accepts and runs exception runnable instances.
*
* @param the exception type
* @return the runnable consumer
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionConsumer, E> exceptionRunnableConsumer() {
return ExceptionRunnableConsumer.INSTANCE;
}
/**
* Get the singleton exception consumer which accepts and runs runnable instances.
*
* @return the runnable consumer
*/
public static ExceptionConsumer runnableExceptionConsumer() {
return RunnableExceptionConsumer.INSTANCE;
}
/**
* Get the singleton consumer which accepts a consumer and an argument to hand to it.
*
* @param the argument type
* @return the consumer
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static BiConsumer, T> consumerBiConsumer() {
return ConsumerBiConsumer.INSTANCE;
}
/**
* Get the singleton consumer which accepts a consumer and an argument to hand to it.
*
* @param the argument type
* @param the exception type
* @return the consumer
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionBiConsumer, T, E> exceptionConsumerBiConsumer() {
return ExceptionConsumerBiConsumer.INSTANCE;
}
/**
* Get the singleton consumer which accepts a consumer and an argument to hand to it.
*
* @param the argument type
* @return the consumer
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionBiConsumer, T, RuntimeException> consumerExceptionBiConsumer() {
return ConsumerExceptionBiConsumer.INSTANCE;
}
/**
* Get the singleton function which accepts a supplier and returns the result of the supplier.
*
* @param the result type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static Function, R> supplierFunction() {
return SupplierFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a supplier and returns the result of the supplier.
*
* @param the result type
* @param the exception type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionFunction, R, E> exceptionSupplierFunction() {
return ExceptionSupplierFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a supplier and returns the result of the supplier.
*
* @param the result type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionFunction, R, RuntimeException> supplierExceptionFunction() {
return SupplierExceptionFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a function which accepts a supplier, all of which return the result
* of the supplier.
*
* @param the result type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static BiFunction, R>, Supplier, R> supplierFunctionBiFunction() {
return FunctionSupplierBiFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a function which accepts a supplier, all of which return the result
* of the supplier.
*
* @param the result type
* @param the exception type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionBiFunction, R, E>, ExceptionSupplier, R, E> exceptionSupplierFunctionBiFunction() {
return ExceptionFunctionSupplierBiFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a function and a parameter to pass to the function, and returns the
* result of the function.
*
* @param the argument type
* @param the result type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static BiFunction, T, R> functionBiFunction() {
return FunctionBiFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a function and a parameter to pass to the function, and returns the
* result of the function.
*
* @param the argument type
* @param the result type
* @param the exception type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionBiFunction, T, R, E> exceptionFunctionBiFunction() {
return ExceptionFunctionBiFunction.INSTANCE;
}
/**
* Get the singleton function which accepts a function and a parameter to pass to the function, and returns the
* result of the function.
*
* @param the argument type
* @param the result type
* @return the function
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionBiFunction, T, R, RuntimeException> functionExceptionBiFunction() {
return FunctionExceptionBiFunction.INSTANCE;
}
/**
* Get a supplier which always returns the same value.
*
* @param value the value to return
* @param the value type
* @return the value supplier
*/
@SuppressWarnings("unchecked")
public static Supplier constantSupplier(T value) {
return value == null ? ConstantSupplier.NULL : new ConstantSupplier<>(value);
}
/**
* Get a supplier which always returns the same value.
*
* @param value the value to return
* @param the value type
* @param the exception type
* @return the value supplier
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static ExceptionSupplier constantExceptionSupplier(T value) {
return value == null ? ConstantSupplier.NULL : new ConstantSupplier(value);
}
/**
* Get a runnable which executes the given consumer with captured values.
*
* @param consumer the consumer to run (must not be {@code null})
* @param param1 the first parameter to pass
* @param param2 the second parameter to pass
* @param the first parameter type
* @param the second parameter type
* @return the capturing runnable
*/
public static Runnable capturingRunnable(BiConsumer consumer, T param1, U param2) {
Assert.checkNotNullParam("consumer", consumer);
return new BiConsumerRunnable(consumer, param1, param2);
}
/**
* Get a runnable which executes the given consumer with captured values.
*
* @param consumer the consumer to run (must not be {@code null})
* @param param the parameter to pass
* @param the parameter type
* @return the capturing runnable
*/
public static Runnable capturingRunnable(Consumer consumer, T param) {
Assert.checkNotNullParam("consumer", consumer);
return new ConsumerRunnable(consumer, param);
}
/**
* Get a runnable which executes the given consumer with captured values.
*
* @param consumer the consumer to run (must not be {@code null})
* @param param1 the first parameter to pass
* @param param2 the second parameter to pass
* @param the first parameter type
* @param the second parameter type
* @param the exception type
* @return the capturing runnable
*/
public static ExceptionRunnable exceptionCapturingRunnable(ExceptionBiConsumer consumer, T param1, U param2) {
Assert.checkNotNullParam("consumer", consumer);
return new ExceptionBiConsumerRunnable(consumer, param1, param2);
}
/**
* Get a runnable which executes the given consumer with captured values.
*
* @param consumer the consumer to run (must not be {@code null})
* @param param the parameter to pass
* @param the parameter type
* @param the exception type
* @return the capturing runnable
*/
public static ExceptionRunnable exceptionCapturingRunnable(ExceptionConsumer consumer, T param) {
Assert.checkNotNullParam("consumer", consumer);
return new ExceptionConsumerRunnable(consumer, param);
}
/**
* Get a consumer which discards the values it is given.
*
* @param the parameter type
* @return the discarding consumer
*/
@SuppressWarnings("unchecked")
public static Consumer discardingConsumer() {
return DiscardingConsumer.INSTANCE;
}
/**
* Get a consumer which discards the values it is given.
*
* @param the parameter type
* @param the exception type
* @return the discarding consumer
*/
@SuppressWarnings("unchecked")
public static ExceptionConsumer discardingExceptionConsumer() {
return DiscardingConsumer.INSTANCE;
}
/**
* Get a consumer which discards the values it is given.
*
* @param the first parameter type
* @param the second parameter type
* @return the discarding consumer
*/
@SuppressWarnings("unchecked")
public static BiConsumer discardingBiConsumer() {
return DiscardingBiConsumer.INSTANCE;
}
/**
* Get a consumer which discards the values it is given.
*
* @param the first parameter type
* @param the second parameter type
* @param the exception type
* @return the discarding consumer
*/
@SuppressWarnings("unchecked")
public static ExceptionBiConsumer discardingExceptionBiConsumer() {
return DiscardingBiConsumer.INSTANCE;
}
/**
* Returns a {@link Consumer} with identical behavior to the specified {@link Consumer} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param consumer a consumer
* @return a functionally equivalent consumer
*/
@SuppressWarnings("unchecked")
public static Consumer cast(Consumer consumer) {
return (Consumer) consumer;
}
/**
* Returns a {@link Predicate} with identical behavior to the specified {@link Predicate} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param predicate a predicate
* @return a functionally equivalent predicate
*/
@SuppressWarnings("unchecked")
public static Predicate cast(Predicate predicate) {
return (Predicate) predicate;
}
/**
* Returns a {@link Supplier} with identical behavior to the specified {@link Supplier} but with relaxed return type.
* @param the return type
* @param the relaxed return type
* @param supplier a supplier
* @return a functionally equivalent supplier
*/
@SuppressWarnings("unchecked")
public static Supplier cast(Supplier supplier) {
return (Supplier) supplier;
}
/**
* Returns a {@link Function} with identical behavior to the specified {@link Function} but with restricted parameter type and relaxed return type.
* @param the parameter type
* @param the return type
* @param the restricted parameter type
* @param the relaxed return type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static Function cast(Function function) {
return (Function) function;
}
/**
* Returns a {@link DoubleFunction} with identical behavior to the specified {@link DoubleFunction} but with relaxed return type.
* @param the return type
* @param the relaxed return type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static DoubleFunction cast(DoubleFunction function) {
return (DoubleFunction) function;
}
/**
* Returns a {@link IntFunction} with identical behavior to the specified {@link IntFunction} but with relaxed return type.
* @param the return type
* @param the relaxed return type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static IntFunction cast(IntFunction function) {
return (IntFunction) function;
}
/**
* Returns a {@link LongFunction} with identical behavior to the specified {@link LongFunction} but with relaxed return type.
* @param the return type
* @param the relaxed return type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static LongFunction cast(LongFunction function) {
return (LongFunction) function;
}
/**
* Returns a {@link ToDoubleFunction} with identical behavior to the specified {@link ToDoubleFunction} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static ToDoubleFunction cast(ToDoubleFunction function) {
return (ToDoubleFunction) function;
}
/**
* Returns a {@link ToIntFunction} with identical behavior to the specified {@link ToIntFunction} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static ToIntFunction cast(ToIntFunction function) {
return (ToIntFunction) function;
}
/**
* Returns a {@link ToLongFunction} with identical behavior to the specified {@link ToLongFunction} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static ToLongFunction cast(ToLongFunction function) {
return (ToLongFunction) function;
}
/**
* Returns a {@link BiConsumer} with identical behavior to the specified {@link BiConsumer} but with restricted parameter types.
* @param the first parameter type
* @param the second parameter type
* @param the restricted first parameter type
* @param the restricted second parameter type
* @param consumer a consumer
* @return a functionally equivalent consumer
*/
@SuppressWarnings("unchecked")
public static BiConsumer cast(BiConsumer consumer) {
return (BiConsumer) consumer;
}
/**
* Returns a {@link ObjDoubleConsumer} with identical behavior to the specified {@link ObjDoubleConsumer} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param consumer a consumer
* @return a functionally equivalent consumer
*/
@SuppressWarnings("unchecked")
public static ObjDoubleConsumer cast(ObjDoubleConsumer consumer) {
return (ObjDoubleConsumer) consumer;
}
/**
* Returns a {@link ObjIntConsumer} with identical behavior to the specified {@link ObjIntConsumer} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param consumer a consumer
* @return a functionally equivalent consumer
*/
@SuppressWarnings("unchecked")
public static ObjIntConsumer cast(ObjIntConsumer consumer) {
return (ObjIntConsumer) consumer;
}
/**
* Returns a {@link ObjLongConsumer} with identical behavior to the specified {@link ObjLongConsumer} but with restricted parameter type.
* @param the parameter type
* @param the restricted parameter type
* @param consumer a consumer
* @return a functionally equivalent consumer
*/
@SuppressWarnings("unchecked")
public static ObjLongConsumer cast(ObjLongConsumer consumer) {
return (ObjLongConsumer) consumer;
}
/**
* Returns a {@link BiPredicate} with identical behavior to the specified {@link BiPredicate} but with restricted parameter types.
* @param the first parameter type
* @param the second parameter type
* @param the restricted first parameter type
* @param the restricted second parameter type
* @param predicate a predicate
* @return a functionally equivalent predicate
*/
@SuppressWarnings("unchecked")
public static BiPredicate cast(BiPredicate predicate) {
return (BiPredicate) predicate;
}
/**
* Returns a {@link BiFunction} with identical behavior to the specified {@link BiFunction} but with restricted parameter types and relaxed return type.
* @param the first parameter type
* @param the second parameter type
* @param the return type
* @param the restricted first parameter type
* @param the restricted second parameter type
* @param the relaxed return type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static BiFunction cast(BiFunction function) {
return (BiFunction) function;
}
/**
* Returns a {@link ToDoubleBiFunction} with identical behavior to the specified {@link ToDoubleBiFunction} but with restricted parameter types.
* @param the first parameter type
* @param the second parameter type
* @param the restricted first parameter type
* @param the restricted second parameter type
* @param function a function
* @return a functionally equivalent function
*/
@SuppressWarnings("unchecked")
public static ToDoubleBiFunction cast(ToDoubleBiFunction function) {
return (ToDoubleBiFunction) function;
}
/**
* Returns a {@link ToIntBiFunction} with identical behavior to the specified {@link ToIntBiFunction} but with restricted parameter types.
* @param the first parameter type
* @param