Java : Predicate - API使用例

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


概要

クラス構成

Predicate は、パラメータなし、戻り値 boolean の関数型インタフェースです。
主に、StreamOptionalラムダ式として使われます。

final var predicate = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

final var stream = Stream.of("aaa", "BBB", "ccc", "DDD");

final var ret = stream.filter(predicate).toList();
System.out.println(ret); // [BBB, DDD]
// ラムダ式の例です。
final var stream = Stream.of("aaa", "BBB", "ccc", "DDD");

final var ret = stream.filter(s -> s.equals(s.toUpperCase())).toList();
System.out.println(ret); // [BBB, DDD]

メソッド

default Predicate<T> and (Predicate<? super T> other)

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

final var predicate1 = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

System.out.println(predicate1.test("abcd")); // false
System.out.println(predicate1.test("ABCD")); // true
System.out.println(predicate1.test("XYZ")); // true

final var predicate2 = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // 文字列が"abcd"であることをチェック(大文字・小文字区別なし)
        return s.equalsIgnoreCase("abcd");
    }
};

System.out.println(predicate2.test("abcd")); // true
System.out.println(predicate2.test("ABCD")); // true
System.out.println(predicate2.test("XYZ")); // false

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

System.out.println(and.test("abcd")); // false
System.out.println(and.test("ABCD")); // true
System.out.println(and.test("XYZ")); // false

static <T> Predicate<T> isEqual (Object targetRef)

2つの引数が等しいかどうかをObjects.equals(Object, Object)に従ってテストする述語を返します。

final var predicate = Predicate.<String>isEqual("abcd");

System.out.println(predicate.test("abcd")); // true
System.out.println(predicate.test("xyz")); // false
final var predicate = Predicate.<Integer>isEqual(123);

System.out.println(predicate.test(123)); // true
System.out.println(predicate.test(456)); // false

default Predicate<T> negate ()

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

final var predicate = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

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

final var negate = predicate.negate();

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

static <T> Predicate<T> not (Predicate<? super T> target)

指定された述語の否定である述語を戻します。

final var predicate = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

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

final var not = Predicate.not(predicate);

System.out.println(not.test("ABCD")); // false
System.out.println(not.test("xyz")); // true

default Predicate<T> or (Predicate<? super T> other)

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

final var predicate1 = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

System.out.println(predicate1.test("abcd")); // false
System.out.println(predicate1.test("ABCD")); // true
System.out.println(predicate1.test("XYZ")); // true

final var predicate2 = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // 文字列が"abcd"であることをチェック(大文字・小文字区別なし)
        return s.equalsIgnoreCase("abcd");
    }
};

System.out.println(predicate2.test("abcd")); // true
System.out.println(predicate2.test("ABCD")); // true
System.out.println(predicate2.test("XYZ")); // false

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

System.out.println(or.test("abcd")); // true
System.out.println(or.test("ABCD")); // true
System.out.println(or.test("XYZ")); // true

boolean test (T t)

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

final var predicate = new Predicate<String>() {
    @Override
    public boolean test(String s) {
        // すべて大文字であることをチェック
        return s.equals(s.toUpperCase());
    }
};

System.out.println(predicate.test("ABCD")); // true
System.out.println(predicate.test("xyz")); // false
// ラムダ式として使う例です。
final var stream = Stream.of("aaa", "BBB", "ccc", "DDD");

final var ret = stream.filter(s -> s.equals(s.toUpperCase())).toList();
System.out.println(ret); // [BBB, DDD]

関連記事

ページの先頭へ