java中常见的函数式接口及简单示例

在Java中,有一些常见的函数式接口可以用于支持函数式编程和Lambda表达式的使用。以下是一些常见的函数式接口:

Predicate:用于判断输入的值是否满足某个条件。它包含方法test,接收一个参数并返回一个布尔值。

Function:用于将一个输入值映射为一个输出值。它包含方法apply,接收一个参数并返回一个结果。

Consumer:用于执行某个操作并消耗输入值,没有返回值。它包含方法accept,接收一个参数但不返回任何结果。

Supplier:用于提供一个值或对象。它不接收任何参数,但会返回一个值或对象。

UnaryOperator:用于对单个输入进行操作,并产生相同类型的输出。它继承自Function接口,接收一个参数并返回一个相同类型的结果。

BinaryOperator:用于对两个输入进行操作,并产生相同类型的输出。它继承自BiFunction接口,接收两个参数并返回一个相同类型的结果。

BiFunction:用于将两个输入值映射为一个输出值。它包含方法apply,接收两个参数并返回一个结果。

Runnable:用于定义执行的代码块,没有输入参数和返回值。它包含方法run,用于执行代码块。

Comparator:用于比较两个对象的顺序。它包含方法compare,接收两个参数并返回一个表示顺序的整数值。

各个函数接口的简单示例如下:

1 Predicate

用于判断输入的值是否满足某个条件。

@FunctionalInterface
interface Predicate {
    boolean test(T t);
}

// 示例:判断一个整数是否为正数
Predicate isPositive = (num) -> num > 0;
System.out.println(isPositive.test(5));  // 输出:true
System.out.println(isPositive.test(-2)); // 输出:false

2 Function

用于将一个输入值映射为一个输出值。

@FunctionalInterface
interface Function {
    R apply(T t);
}

// 示例:将字符串转换为整数
Function stringToInt = Integer::parseInt;
System.out.println(stringToInt.apply("123")); // 输出:123

Consumer

用于执行某个操作并消耗输入值,没有返回值。

@FunctionalInterface
interface Consumer {
    void accept(T t);
}

// 示例:打印字符串长度
Consumer printLength = str -> System.out.println(str.length());
printLength.accept("Hello"); // 输出:5

Supplier

用于提供一个值或对象。

@FunctionalInterface
interface Supplier {
    T get();
}

// 示例:生成随机数
Supplier randomGenerator = () -> (int) (Math.random() * 100);
System.out.println(randomGenerator.get()); // 输出:随机生成的一个整数

5 UnaryOperator

对单个输入进行操作,并产生相同类型的输出。

@FunctionalInterface
interface UnaryOperator extends Function {
    // 继承自Function接口,省略了apply方法的声明
}

// 示例:对整数进行平方操作
UnaryOperator square = num -> num * num;
System.out.println(square.apply(5)); // 输出:25

6 BinaryOperator

对两个输入进行操作,并产生相同类型的输出。

@FunctionalInterface
interface BinaryOperator extends BiFunction {
    // 继承自BiFunction接口,省略了apply方法的声明
}

// 示例:对两个整数求最大值
BinaryOperator max = (a, b) -> a > b ? a : b;
System.out.println(max.apply(5, 3)); // 输出:5

BiConsumer

对两个输入值执行某个操作,没有返回值。

@FunctionalInterface
interface BiConsumer {
    void accept(T t, U u);
}

// 示例:打印两个整数的和
BiConsumer printSum = (a, b) -> System.out.println(a + b);
printSum.accept(2, 3); // 输出:5

BiFunction

将两个输入值映射为一个输出值。

@FunctionalInterface
interface BiFunction {
    R apply(T t, U u);
}

// 示例:将两个字符串拼接起来
BiFunction concatenate = (str1, str2) -> str1 + str2;
System.out.println(concatenate.apply("Hello, ", "World!")); // 输出:Hello, World!

9 IntPredicate

用于判断输入的整数是否满足某个条件。

@FunctionalInterface
interface IntPredicate {
    boolean test(int value);
}

// 示例:判断一个整数是否为偶数
IntPredicate isEven = num -> num % 2 == 0;
System.out.println(isEven.test(4));  // 输出:true
System.out.println(isEven.test(7));  // 输出:false

你可能感兴趣的:(java,开发语言,函数式接口)