java8函数式接口的简单使用

        Java 8 引入了函数式接口和 Lambda 表达式,这使得编写简洁、可读性强的函数式风格代码变得非常容易。Java 8 的 java.util.function 包中定义了一系列函数式接口,如 Function, Predicate, Consumer, Supplier 等,它们可以用于多种用途,例如数据转换、过滤、收集等。下面我将通过几个例子来介绍一些常用的函数式接口:

1. Function<T, R>Function

        接口代表了一个接受一个类型参数 T 的输入,并产生一个类型 R 的结果的函数。它有一个抽象方法 apply。

示例

import java.util.function.Function;

public class FunctionExample {

    public static void main(String[] args) {
        // 定义一个 Function 对象
        Function<Integer, Integer> square = x -> x * x;

        // 使用 apply 方法
        int result = square.apply(5); // 结果是 25
        System.out.println("Square of 5 is: " + result);

        // 连接多个 Function
        Function<Integer, Integer> addOne = x -> x + 1;
        Function<Integer, Integer> composed = square.andThen(addOne);

        int composedResult = composed.apply(5); // 先平方再加一,结果是 26
        System.out.println("Square and then add one of 5 is: " + composedResult);
    }
}

2. PredicatePredicate

         接口代表了一个接受一个类型 T 的输入,并返回一个布尔值的结果。它有一个抽象方法 test。

示例

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class PredicateExample {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        // 定义一个 Predicate 对象
        Predicate<Integer> evenNumber = n -> n % 2 == 0;

        // 使用 Predicate 过滤列表中的元素
        numbers.stream()
                .filter(evenNumber)
                .forEach(System.out::println);
    }
}

3. ConsumerConsumer

        接口代表了一个接受一个类型 T 的输入,并且不返回任何结果的操作。它有一个抽象方法 accept。

示例

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class ConsumerExample {

    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // 定义一个 Consumer 对象
        Consumer<String> printUpperCase = name -> System.out.println(name.toUpperCase());

        // 使用 Consumer 处理列表中的每个元素
        names.forEach(printUpperCase);
    }
}

4. SupplierSupplier

        接口代表了一个无参且返回一个类型 T 的结果的操作。它有一个抽象方法 get。

示例

import java.util.function.Supplier;

public class SupplierExample {

    public static void main(String[] args) {
        // 定义一个 Supplier 对象
        Supplier<String> getRandomName = () -> "John Doe";

        // 使用 Supplier 获取一个随机名字
        String name = getRandomName.get();
        System.out.println("Random name: " + name);
    }
}

这些例子展示了如何使用 Java 8 的函数式接口来编写简洁的代码。这些接口在处理集合、数据流等方面非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值