Java : BiPredicate - API使用例

BiPredicate (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

2つの引数の述語(boolean値関数)を表します。 これは、Predicateを、引数を2個取るように特殊化したものです。

クラス構成

BiPredicate は、2つのパラメータと戻り値 boolean の関数型インタフェースです。

final var predicate = new BiPredicate<Integer, String>() {
    @Override
    public boolean test(Integer i, String s) {
        return Integer.decode(s).equals(i);
    }
};

final var ret1 = predicate.test(255, "0xff");
System.out.println(ret1); // true

final var ret2 = predicate.test(100, "0x100");
System.out.println(ret2); // false

メソッド

default BiPredicate<T,U> and (BiPredicate<? super T,? super U> other)

この述語と別の述語の短絡論理積を表す合成述語を返します。

final var predicate1 = new BiPredicate<String, String>() {
    @Override
    public boolean test(String s1, String s2) {
        return s1.equals(s2);
    }
};

System.out.println(predicate1.test("ABC", "XYZ")); // false
System.out.println(predicate1.test("ABC", "ABC")); // true
System.out.println(predicate1.test("def", "def")); // true

final var predicate2 = new BiPredicate<String, String>() {
    @Override
    public boolean test(String s1, String s2) {
        // すべて大文字であることをチェックします。
        return s1.toUpperCase().equals(s1) && s2.toUpperCase().equals(s2);
    }
};

System.out.println(predicate2.test("ABC", "XYZ")); // true
System.out.println(predicate2.test("ABC", "ABC")); // true
System.out.println(predicate2.test("def", "def")); // false

// 2つのPredicateをAND条件とします。
final var and = predicate1.and(predicate2);

System.out.println(and.test("ABC", "XYZ")); // false
System.out.println(and.test("ABC", "ABC")); // true
System.out.println(and.test("def", "def")); // false

default BiPredicate<T,U> negate ()

この述語の論理否定を表す述語を返します。

final var predicate = new BiPredicate<String, String>() {
    @Override
    public boolean test(String s1, String s2) {
        return s1.equals(s2);
    }
};

System.out.println(predicate.test("abc", "abc")); // true
System.out.println(predicate.test("abc", "xyz")); // false

final var negate = predicate.negate();

System.out.println(negate.test("abc", "abc")); // false
System.out.println(negate.test("abc", "xyz")); // true

default BiPredicate<T,U> or (BiPredicate<? super T,? super U> other)

この述語と別の述語の短絡論理和を表す合成述語を返します。

final var predicate1 = new BiPredicate<String, String>() {
    @Override
    public boolean test(String s1, String s2) {
        return s1.equals(s2);
    }
};

System.out.println(predicate1.test("ABC", "XYZ")); // false
System.out.println(predicate1.test("ABC", "ABC")); // true
System.out.println(predicate1.test("def", "def")); // true

final var predicate2 = new BiPredicate<String, String>() {
    @Override
    public boolean test(String s1, String s2) {
        // すべて大文字であることをチェックします。
        return s1.toUpperCase().equals(s1) && s2.toUpperCase().equals(s2);
    }
};

System.out.println(predicate2.test("ABC", "XYZ")); // true
System.out.println(predicate2.test("ABC", "ABC")); // true
System.out.println(predicate2.test("def", "def")); // false

// 2つのPredicateをOR条件とします。
final var or = predicate1.or(predicate2);

System.out.println(or.test("ABC", "XYZ")); // true
System.out.println(or.test("ABC", "ABC")); // true
System.out.println(or.test("def", "def")); // true

boolean test (T t, U u)

指定された引数でこの述語を評価します。

final var predicate = new BiPredicate<Integer, String>() {
    @Override
    public boolean test(Integer i, String s) {
        return Integer.decode(s).equals(i);
    }
};

final var ret1 = predicate.test(255, "0xff");
System.out.println(ret1); // true

final var ret2 = predicate.test(100, "0x100");
System.out.println(ret2); // false

関連記事の更新

ページの先頭へ