Вы можете использовать функциональные интерфейсы Java 8.
Поскольку вам нужны 2 операнда и логический результат, вы можете просто использовать BiPredicate
, но, поскольку вы хотите, чтобы 2 операнда были одного типа, для этого вам потребуется повторить тип чтобы вы могли создать новый функциональный интерфейс, например по имени BinaryPredicate
:
interface BinaryPredicate<T> extends BiPredicate<T, T> {
// nothing to add
}
Тогда ваш метод может быть, например, например, если вы хотите, чтобы операнды были типом, который реализует Comparable
:
public static <T extends Comparable<T>> BinaryPredicate<T> objectOperator(int value){
if (value < 0)
return (a, b) -> a.compareTo(b) >= 0;
return (a, b) -> a.compareTo(b) <= 0;
}
Если вы хотите, чтобы операнды имели значения int
, вы можете создать это вместо:
interface IntBinaryPredicate {
boolean test(int a, int b);
}
Тогда сделайте ваш метод так:
public static IntBinaryPredicate intOperator(int value){
if (value < 0)
return (a, b) -> a >= b;
return (a, b) -> a <= b;
}
Вот как бы вы их использовали:
BinaryPredicate<String> stringOp = objectOperator(1);
if (stringOp.test("Foo", "Bar"))
IntBinaryPredicate intOp = intOperator(1);
if (intOp.test(13, 42))