该如何使用java中Consumer接口呢?

Java 8 引入了 java.util.function 包,其中包含了一些常用的函数式接口,如 ConsumerFunctionPredicate 等。

Consumer 接口是其中一个函数式接口,用于表示接受一个输入参数并执行某种操作的操作者。它包含一个抽象方法 accept(T t),该方法接受一个泛型类型的参数 T,并且没有返回值。 源码:

java 复制代码
package java.util.function;

import java.util.Objects;

@FunctionalInterface
public interface Consumer<T> {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);

    /**
     * Returns a composed {@code Consumer} that performs, in sequence, this
     * operation followed by the {@code after} operation. If performing either
     * operation throws an exception, it is relayed to the caller of the
     * composed operation.  If performing this operation throws an exception,
     * the {@code after} operation will not be performed.
     *
     * @param after the operation to perform after this operation
     * @return a composed {@code Consumer} that performs in sequence this
     * operation followed by the {@code after} operation
     * @throws NullPointerException if {@code after} is null
     */
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

@FunctionalInterface是一个标记注解,该注解并非强制性的,但它可以帮助编译器检查是否符合函数式接口的定义。

以下是如何在 Java 中使用 Consumer 接口的一些建议:

1. 基本用法:

java 复制代码
import java.util.function.Consumer;

public class ConsumerExample {

    public static void main(String[] args) {
        // 创建一个Consumer实例
        Consumer<String> myConsumer = s -> System.out.println(s);

        // 使用Consumer的accept方法
        myConsumer.accept("Hello, Consumer!");
    }
}

2. 组合多个 Consumer:

你可以使用 andThen 方法将多个 Consumer 组合在一起,形成一个串行执行的操作链。

java 复制代码
import java.util.function.Consumer;

public class ConsumerExample {

    public static void main(String[] args) {
        // 创建两个Consumer实例
        Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase());
        Consumer<String> printLength = s -> System.out.println("Length: " + s.length());

        // 组合两个Consumer
        Consumer<String> combinedConsumer = printUpperCase.andThen(printLength);

        // 使用组合后的Consumer
        combinedConsumer.accept("Hello, Consumer!");
    }
}

3. 使用方法引用:

你可以使用方法引用来引用已有的方法,从而创建 Consumer 的实例。

java 复制代码
import java.util.function.Consumer;

public class ConsumerExample {

    public static void printUpperCase(String s) {
        System.out.println(s.toUpperCase());
    }

    public static void main(String[] args) {
        // 使用静态方法引用创建Consumer实例
        Consumer<String> myConsumer = ConsumerExample::printUpperCase;

        // 使用Consumer的accept方法
        myConsumer.accept("Hello, Consumer!");
    }
}

4. 在集合操作中使用:

Consumer 接口在 Java 8 引入的函数式编程特性中,经常与集合框架的方法结合使用,例如 forEach 方法:

java 复制代码
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class ConsumerExample {

    public static void main(String[] args) {
        List<String> words = Arrays.asList("Java", "is", "fun");

        // 使用Consumer的forEach方法遍历集合元素
        Consumer<String> printUpperCase = s -> System.out.println(s.toUpperCase());
        words.forEach(printUpperCase);
    }
}

这些示例展示了如何使用 Consumer 接口执行各种操作,包括基本用法、组合、方法引用以及集合操作中的应用。

相关推荐
小Ti客栈7 小时前
Spring Boot 集成 Springdoc-OpenAPI 与 Knife4j实现接口文档与可视化调试
java·spring boot·后端
Ai拆代码的曹操8 小时前
Spring 事务 REQUIRES_NEW 嵌套调用:连接池翻倍的秘密
java·后端·spring
动恰客流统计8 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能
Ivanqhz9 小时前
Rust &‘static str浅析
java·前端·javascript·rust
weixin_4196583112 小时前
Docker 搭建 Jenkins 服务
java·docker·jenkins
captain37612 小时前
多线程线程安全问题
java·java-ee
CoderYanger13 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
灵极海13 小时前
LangChain4j RAG 实战完整指南:从入门到踩坑
java·langchain
yaoxin52112313 小时前
476. Java 反射 - 调用方法
java·开发语言
Ivanqhz14 小时前
Rust Lazy浅析
java·javascript·rust