[Java] Mehrfach-ODER-Bedingungsbeurteilung

solch eine Sache

Häufig verwendete Methode


Arrays.asList(expects...).contains(target)

Abgesehen von dem Tsukkomi, dass es in Ordnung ist

MultipleConditionMatcher.java


//Lombok erforderlich.jar

import java.util.Arrays;

import lombok.NonNull;

/**
 *Beurteilung mehrerer OP-Bedingungen
 * @param <T>Beurteilungszieltyp
 */
public class MultipleConditionMatcher<T> {

    /**Urteilsziel*/
    @NonNull
    private T target;

    /**
     *Konstrukteur
     * @param target Beurteilungsziel
     */
    public MultipleConditionMatcher(@NonNull T target) {
        this.target = target;
    }

    /**
     *Beurteilung mehrerer OP-Bedingungen
     * @param erwartet Urteilsbedingungen
     * @return Wenn eine der Urteilsbedingungen erfüllt ist{code true}
     */
    @SuppressWarnings("unchecked")
    public boolean in(@NonNull final T... expects) {
        return Arrays.stream(expects).anyMatch(target::equals);
    }

    /**
     *Beurteilung mehrerer OP-Bedingungen
     * @param erwartet Urteilsbedingungen
     * @return Wenn eine der Urteilsbedingungen erfüllt ist{code true}
     */
    @SuppressWarnings("unchecked")
    public boolean or(@NonNull final T... expects) {
        return in(expects);
    }

}

Beispielcode


// String
System.out.println(new MultipleConditionMatcher<String>("Hoge").in("Hoge", "Fuga"));
// Integer
System.out.println(new MultipleConditionMatcher<Integer>(Integer.valueOf(1)).or(Integer.valueOf(0), Integer.valueOf(Integer.MAX_VALUE));

Ausführungsergebnis


true
false

** (Hinzugefügt am 01.11.2018) **

Ich habe eine Version erstellt, die mit Predicate # Or () verbunden ist.

MultipleConditionMatcher.java


//Lombok erforderlich.jar

import java.util.function.Predicate;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.NonNull;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MultipleConditionMatcher {

    /**
     *Beurteilung mehrerer OP-Bedingungen
     * @param <T>Beurteilungszieltyp
     * @param target Beurteilungsziel
     * @param erwartet Urteilsbedingungen
     * @return Wenn eine der Urteilsbedingungen erfüllt ist{code true}
     */
    @SuppressWarnings("unchecked")
    public static <T> boolean in(final T target, final T... expects) {
        if (expects.length == 0) {
            return false;
        }
        Predicate<T> chainedExpect = null;
        for (final T expect : expects) {
            if (chainedExpect == null) {
                chainedExpect = expect::equals;
            } else {
                chainedExpect.or(expect::equals);
            }
        }
        return chainedExpect.test(target);
    }

    /**
     *Beurteilung mehrerer OP-Bedingungen
     * @param <T>Beurteilungszieltyp
     * @param target Beurteilungsziel
     * @param erwartet Urteilsbedingungen
     * @return Wenn eine der Urteilsbedingungen erfüllt ist{code true}
     */
    @SuppressWarnings("unchecked")
    public static <T> boolean or(final T target, final T... expects) {
        return in(target, expects);
    }

}

Beispielcode


// String
System.out.println(MultipleConditionMatcher.in("Hoge", "Hoge", "Fuga"));
// Integer(boxed int)
System.out.println(MultipleConditionMatcher.or(1, 0, Integer.MAX_VALUE));

Ausführungsergebnis


true
false

Recommended Posts

[Java] Mehrfach-ODER-Bedingungsbeurteilung
Mehrfacher Ersatz für Java-Zeichenfolgen
[Java] Beispiel für ein Urlaubsurteil
[Java] Mehrere Listen (Sammlungen) kombinieren
Vorgang zum Verbinden mehrerer Streams @Java
Java Unit Test Library-Arterie-Aktuelles Datum Beurteilung
Fangen Sie mehrere Ausnahmen zusammen in Java