diff --git a/akka-actor/src/main/java/akka/japi/pf/ReceiveBuilder.java b/akka-actor/src/main/java/akka/japi/pf/ReceiveBuilder.java index 2c9d55364d..1fa7959c9b 100644 --- a/akka-actor/src/main/java/akka/japi/pf/ReceiveBuilder.java +++ b/akka-actor/src/main/java/akka/japi/pf/ReceiveBuilder.java @@ -4,10 +4,9 @@ package akka.japi.pf; +import akka.actor.AbstractActor.Receive; import scala.PartialFunction; import scala.runtime.BoxedUnit; -import akka.actor.AbstractActor; -import akka.actor.AbstractActor.Receive; /** * Used for building a partial function for {@link akka.actor.AbstractActor#createReceive() @@ -169,7 +168,7 @@ public class ReceiveBuilder { * List.class and (List<String> list) -> {}. * * @param type a type to match the argument against - * @param externalPredicate a external predicate that will be evaluated if the type matches + * @param externalPredicate an external predicate that will be evaluated if the type matches * @param apply an action to apply to the argument if the type matches and the predicate returns * true * @return a builder with the case statement added @@ -240,6 +239,27 @@ public class ReceiveBuilder { return this; } + /** + * Add a new case statement to this builder. + * + * @param object the object to compare equals with + * @param externalPredicate an external predicate that will be evaluated if the object compares + * equal + * @param apply an action to apply to the argument if the object compares equal + * @return a builder with the case statement added + */ + @SuppressWarnings("unchecked") + public

ReceiveBuilder matchEquals( + final P object, + final java.util.function.BooleanSupplier externalPredicate, + final FI.UnitApply

apply) { + final FI.Predicate predicate = o -> object.equals(o) && externalPredicate.getAsBoolean(); + addStatement(new UnitCaseStatement<>(predicate, (FI.UnitApply) apply)); + return this; + } + + private static final FI.Predicate ALWAYS_TRUE = (input) -> true; + /** * Add a new case statement to this builder, that matches any argument. * @@ -247,15 +267,22 @@ public class ReceiveBuilder { * @return a builder with the case statement added */ public ReceiveBuilder matchAny(final FI.UnitApply apply) { - addStatement( - new UnitCaseStatement( - new FI.Predicate() { - @Override - public boolean defined(Object o) { - return true; - } - }, - apply)); + addStatement(new UnitCaseStatement<>(ALWAYS_TRUE, apply)); + return this; + } + + /** + * Add a new case statement to this builder, that pass the test of the predicate. + * + * @param externalPredicate an external predicate that will always be evaluated. + * @param apply an action to apply to the argument + * @return a builder with the case statement added + */ + public ReceiveBuilder matchAny( + final java.util.function.BooleanSupplier externalPredicate, + final FI.UnitApply apply) { + final FI.Predicate predicate = o -> externalPredicate.getAsBoolean(); + addStatement(new UnitCaseStatement<>(predicate, apply)); return this; } }