All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.digitalid.utility.functional.interfaces.Consumer Maven / Gradle / Ivy

The newest version!
package net.digitalid.utility.functional.interfaces;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import net.digitalid.utility.annotations.generics.Specifiable;
import net.digitalid.utility.annotations.method.Pure;
import net.digitalid.utility.annotations.ownership.Capturable;
import net.digitalid.utility.annotations.ownership.Captured;
import net.digitalid.utility.functional.failable.FailableConsumer;
import net.digitalid.utility.validation.annotations.type.Functional;
import net.digitalid.utility.validation.annotations.type.Mutable;

/**
 * This functional interface models a method that consumes objects of type {@code INPUT} without returning a result.
 */
@Mutable
@Functional
public interface Consumer<@Specifiable INPUT> extends FailableConsumer {
    
    /* -------------------------------------------------- Composition -------------------------------------------------- */
    
    /**
     * Returns the composition of this consumer followed by the given consumer.
     */
    @Pure
    public default @Capturable @Nonnull Consumer before(@Captured @Nonnull Consumer consumer) {
        return input -> { consume(input); consumer.consume(input); };
    }
    
    /**
     * Returns the composition of the given consumer followed by this consumer.
     */
    @Pure
    public default @Capturable @Nonnull Consumer after(@Captured @Nonnull Consumer consumer) {
        return input -> { consumer.consume(input); consume(input); };
    }
    
    /**
     * Returns the composition of the given function followed by this consumer.
     */
    @Pure
    public default @Capturable <@Specifiable INITIAL_INPUT> @Nonnull Consumer after(@Nonnull UnaryFunction function) {
        return input -> consume(function.evaluate(input));
    }
    
    /* -------------------------------------------------- Conversion -------------------------------------------------- */
    
    @Pure
    @Override
    @SuppressWarnings("null")
    public default @Nonnull UnaryFunction asFunction() {
        return input -> { consume(input); return null; };
    }
    
    /* -------------------------------------------------- Synchronization -------------------------------------------------- */
    
    @Pure
    @Override
    public default @Nonnull Consumer synchronize() {
        return input -> {
            synchronized (this) {
                consume(input);
            }
        };
    }
    
    /* -------------------------------------------------- Constants -------------------------------------------------- */
    
    /**
     * Stores a consumer that does nothing.
     */
    public static final @Nonnull Consumer<@Nullable Object> DO_NOTHING = input -> {};
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy