JDK8函数式接口之Consumer

简介: JDK8函数式接口之Consumer

写在前面


JDK8 API提供了很多函数式接口,这些函数式接口可以被抽象成一个具体的方法,并且使其使用在Lambda表达式中,今天我们要来说的就是其中的Consumer函数接口。


JDK8函数式接口之Consumer


从名字来看,我们就能知道Consumer是一个消费型函数式接口,此函数具有一个抽象方法,让我们来一起看一下吧。


此函数可以将传入的参数进行任意的操作或者逻辑判断筛选。


accept方法


accept方法,针对所给到的参数,进行一系列自定义的操作。


让我们先来看看示例吧:


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test {
    private String name;
    private String pwd;
    public static void main(String[] args) {
        List<Test> listList = new ArrayList<>();
        Consumer<Test> consumer  = x -> {
            if ("张三".equals(x.getName())){
                listList.add(x);
            }
        };
        List<Test> list = new ArrayList<>();
        list.add(new Test("张三","123"));
        list.add(new Test("张四","123"));
        list.add(new Test("张五","123"));
        list.add(new Test("张六","123"));
        list.stream().forEach(consumer);
        System.out.println(JSON.toJSONString(listList));
    }
}


再来看一下执行结果,如下:

image.png

最后是将张三的这条记录添加到了集合中了。


现在consumer的使用也就明朗了,在Consumer函数中是可以定义一个逻辑来,根据传入的参数的不同获得不同的结果。


这里并没有说道accept方法,其实这里的forEach方法中默认已经调用了,如果是不用forEach方法的话,那就是下面的这种方式了。


public static void main(String[] args) {
    List<Test> listList = new ArrayList<>();
    Consumer<Test> consumer  = x -> {
        if ("张三".equals(x.getName())){
            listList.add(x);
        }
    };
    List<Test> list = new ArrayList<>();
    list.add(new Test("张三","123"));
    list.add(new Test("张四","123"));
    list.add(new Test("张五","123"));
    list.add(new Test("张六","123"));
    for (Test test : list){
        consumer.accept(test);
    }
    System.out.println(JSON.toJSONString(listList));
}


执行结果是一样的。

image.png

默认方法andThen


此方法是Consumer函数接口的默认方法,其提供的功能就是在原来的基础上增加是附加条件。


代码示例如下:


for (Test test : list){
    consumer.andThen(consumer2).accept(test);
}


如上使用方法中的consumer2是新定义的一个Consumer对象,在这里面可以加入更多的逻辑元素。


总结

今天学习完Consumer函数式接口,是否有更多收获呢?


相关文章
|
16天前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
2月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
2月前
|
Java Maven 容器
JDK版本特性问题之想使用接口中的私有方法,如何实现
JDK版本特性问题之想使用接口中的私有方法,如何实现
JDK版本特性问题之想使用接口中的私有方法,如何实现
|
4月前
|
Java
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
51 1
|
4月前
|
Java
JDK 1.8 函数接口(收藏用)
JDK 1.8 函数接口(收藏用)
|
5月前
|
Java
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
【JAVA进阶篇教学】第四篇:JDK8中函数式接口
|
5月前
|
Java 开发者
JDK 8:函数式接口的新篇章
JDK 8引入了函数式接口,这一新特性为Java开发者带来了巨大的便利。本文将深入探讨函数式接口的原理、优势以及如何在实际开发中应用这一特性。
|
5月前
|
Java 开发者
JDK 9新特性探秘:接口中的私有方法
本文旨在探讨Java Development Kit 9(JDK 9)为Java接口引入的新特性——私有方法。在JDK 9之前,接口只能包含公共的抽象方法和常量。然而,随着Java的不断发展,接口中需要更加灵活的方式来处理复杂性和代码重用。因此,JDK 9引入了私有方法,允许开发者在接口内部定义私有方法和私有静态方法,从而提高了代码的模块性和可维护性。本文将详细介绍这一新特性的使用方法、应用场景及其对Java编程的影响。
|
5月前
|
存储 Java 关系型数据库
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
JDK8中的新特性(Lambda、函数式接口、方法引用、Stream)(二)
|
22天前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
100 3