掌握Java 8中的Consumer函数式接口

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿我们奔赴在各自的热爱里…

一、源码学习

在这里插入图片描述

在学习Consumer的源码前,需要了解一些基础概念和类:

  • Consumer:是一个函数式接口,接收一个参数并执行操作。它有一个抽象方法accept(T t),用来接收参数。Consumer表示接收一个T类型参数。

  • Lambda表达式:是一种函数式编程的语法,可以用来实现函数式接口。

  • 方法引用:是一种简化Lambda表达式的语法,可以直接引用一个已有的方法。

  • Function:也是一个函数式接口,接收一个参数并返回一个值。它有一个抽象方法apply(T t),用来处理参数并返回结果。Function<T, R>表示接收一个T类型参数,返回一个R类型结果。

Consumer的源码(JDK1.8 ):

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

Consumer是一个函数式接口,只有一个抽象方法accept,用来接收参数并执行操作。默认方法andThen,接收一个Consumer类型的参数after,返回一个新的Consumer对象,它会将参数传递给当前Consumer对象和after对象,实现多个操作的连续执行。


在Java 8中,它是一个泛型接口,可以接收任意类型的参数。Consumer接口中有一个方法accept(T t),其中T为参数类型,用于执行接收到的操作。

例如,要打印一个字符串可以使用Consumer接口:

Consumer<String> printMessage = message -> System.out.println(message);
printMessage.accept("Hello, world!");

上面的代码中,我们首先创建一个Consumer类型的变量printMessage,它接收一个字符串类型的参数,并将其打印到控制台。然后我们调用accept方法,传递一个字符串"Hello, world!",方法执行后将会输出该字符串。

Consumer接口常用于需要执行一些操作,但不需要返回任何值的场景,例如遍历集合,对集合中的元素进行处理等等。它可以和Lambda表达式一起使用,简化代码实现。


二、案例学习

在使用Consumer时,可以通过Lambda表达式或方法引用来创建Consumer对象,并将其作为参数传递给其他方法。例如:

Consumer<String> print = s -> System.out.println(s);
print.accept("Hello world!");  // 输出"Hello world!"

或者直接使用方法引用:

Consumer<String> print = System.out::println;
print.accept("Hello world!");  // 输出"Hello world!"

也可以使用类型推断来简化代码:

var print = (Consumer<String>)System.out::println;
print.accept("Hello world!");  // 输出"Hello world!"

下面是一个简单的使用案例,演示如何使用andThen方法将两个Consumer组合在一起:

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> printUpperCase = str -> System.out.println(str.toUpperCase());
        Consumer<String> printLowerCase = str -> System.out.println(str.toLowerCase());

        // 使用andThen将两个Consumer组合在一起
        Consumer<String> printBoth = printUpperCase.andThen(printLowerCase);

        // 执行组合后的Consumer
        printBoth.accept("Hello World");
    }
}

输出结果

HELLO WORLD
hello world

在这个示例中,我们定义了两个Consumer,一个用于将字符串转换为大写字母并打印,另一个用于将字符串转换为小写字母并打印。然后,我们使用andThen方法将它们组合在一起,形成一个新的Consumer,该Consumer将首先执行printUpperCase,然后再执行printLowerCase。最后,我们执行这个组合后的Consumer,将字符串"Hello World"作为参数传递给它。由于printUpperCaseprintLowerCase都会输出一些文本,因此我们可以看到在控制台上打印了两行文本。


三、总结提炼

可以通过以下方法快速记忆Consumer

  1. Consumer的字面意思是“消费者”,可以理解为一个接收输入并进行某些操作的函数接口。

  2. Consumer接口只有一个抽象方法accept(),该方法接收一个参数并返回void,因此可以被用于任何需要执行某些操作但不需要返回值的情况。

  3. Consumer接口通常用于对集合或流中的元素进行操作,例如打印、转换、过滤等。

  4. Consumer接口可以使用andThen()方法将两个Consumer组合在一起,形成一个新的Consumer,该Consumer将首先执行第一个Consumer,然后再执行第二个Consumer

  5. Consumer接口通常通过lambda表达式来创建,例如(x) -> System.out.println(x)表示将输入打印到控制台。

通过以上方法,可以快速理解和记忆Consumer接口的用法和特点。

在这里插入图片描述


📖☕️🌊📝📚🎩🚀
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

📚愿我们奔赴在各自的热爱里!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员可乐丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值