Java基础篇--函数式接口

这篇具有很好参考价值的文章主要介绍了Java基础篇--函数式接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、函数式接口概述:

1.函数式接口:有且仅有一个抽象方法的接口,java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口,只有确保接口有且仅有一个抽象方法,java中的Lambda才能顺利的进行推导

二、如何检测一个接口是不是函数式接口呢?

1.@FunctionalInterface

2.放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败

@FunctionalInterface
public interfaceSum {
    void show();
}

三、注意:

1.我们自己定义函数式接口时候,@FunctionalInterface是可选的,就算我不写这个注解,只要保证满足函数式接口定义条件, 也照样是函数式接口。但是,建议加上该注解

四、函数式接口作为方法的参数: 

1.如果方法的参数提供是一个函数式接口,我们可以使用Lambda表达式做为参数传递

startThread(() -> System.out.println(Thread.currentThread().getName()+"线程启动"))

 五、函数式接口作为方法的返回值:

1.如果返回值是一个函数式接口,我们可以使用Lambda表示作为结果返回

private static Comparator<String> getComparator(){
        return (s1,s2) -> s1.length()-s1.length();
    }

 六、常用的函数式接口:

1.Supplier接口

2.Consumer接口

3.Predicate接口

4.Function接口

七 、Supplier接口:

1.Supplier<T>:包含一个无参的方法

2.T get():获得结果

3.该方法不需要参数,它会按照某种实现逻辑(由Lambda表达式实现)返回一个数据

4.Supplier<T>接口也被称为生产型接口,如果我们指定了接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据供我们使用

 private static String getString(Supplier<String> s){
        return s.get();
    }
    private static Integer getInteger(Supplier<Integer> i){
        return i.get();
    }

 八、Consumer接口:

1.Consumer<T>:包含两个方法

2.void accept(T t):对给定的参数执行操作

3.default Consumer<T> andThen(Consumer after):返回一个组合的Consumer,依次执行操作,然后执行after操作

4.Consumer<T>接口也被称为消费型接口,它消费的数据类型由泛型指定

 public static void main(String[] args) {
        operatorString("亚瑟",(String s) -> System.out.println(s));
        operatorString("貂蝉",s -> System.out.println(s));
        operatorString("安其拉",System.out::println);
        operatorString("安其拉",(String s) -> {
            System.out.println(new StringBuilder(s).reverse().toString());
        });
        operatorString("貂蝉",s -> System.out.println(new StringBuilder(s).reverse().toString()));
        operatorString("成吉思汗",s -> System.out.println(s),s1 -> System.out.println(new StringBuilder(s1).reverse().toString()));
    }
    //定义一个方法,用不同的方式消费同一个字符串数据两次
    private static void operatorString(String name,Consumer<String> con,Consumer<String> con1){
//        con.accept(name);
//        con1.accept(name);
        con.andThen(con1).accept(name);
    }
    //定义一个方法,消费一个字符串数据
    private static void operatorString(String name, Consumer<String> con){
        con.accept(name);
    }

 九、Predicate接口:

1.Predicate<T>:常用的四个方法

2.boolean test(T t):对给定的参数进行判断(判断逻辑由Lambda表达式实现),返回一个布尔值

3.default Predicate<T> negate():返回一个逻辑的否定,对应逻辑非

4.default Predicate<T> and(Predicate other):返回一个组合判断,对应短路与

5.default Predicate<T> ot(Predicate other):返回一个组合判断,对应短路或

6.Predicate<T>接口通常用于判断参数是否满足指定的条件

public static void main(String[] args) {
        boolean b = checkString("hll",s -> s.length() > 8);
        System.out.println(b);
        boolean b1 = checkString("HelloWorld",s -> s.length() > 8);
        System.out.println(b1);

        boolean b2 = checkString("hell",s -> s.length() > 8,s -> s.length() < 15);
        System.out.println(b2);
        boolean b3 = checkString("HelloWorld",s -> s.length() > 8,s -> s.length() < 15);
        System.out.println(b3);
    }
    private static boolean checkString(String s,Predicate<String> pre,Predicate<String> pre1){
        return pre.or(pre1).test(s);//相当于||
    }
    private static boolean checkString(String s,Predicate<String> pre){
        return pre.negate().test(s);
    }

 十、Function接口:

1.Function<T,R>:两个常用方法,T表示输入数据类型,R表示输出数据类型

2.R apply<T t>:将此函数应用与给定的参数

3.default<V> Function andThen(Function after):返回一个组合函数,首先将该函数应用与输入,然后将after函数应用于结果

4.Function<T,R>接口通常用于对参数进行处理,转换(处理逻辑由Lambda表达式实现),然后返回一个新的值

public static void main(String[] args) {
        convert("100",s -> Integer.parseInt(s));
        convert(100,i -> String.valueOf(i + 566));//键int类型转换为字符串
        convert("100",s -> Integer.parseInt(s),i -> String.valueOf(i + 566));
    }
    private static void convert(String s,Function<String,Integer> fun){
        int i = fun.apply(s);
        System.out.println(i);
    }
    private static void convert(int i,Function<Integer,String> fun){
        String s = fun.apply(i);
        System.out.println(s);
    }
    private static void convert(String s,Function<String,Integer> fun,Function<Integer,String> fun1){
        String ss = fun.andThen(fun1).apply(s);
        System.out.println(ss);
    }

 文章来源地址https://www.toymoban.com/news/detail-400882.html

到了这里,关于Java基础篇--函数式接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】一个简单的接口例子(帮助理解接口+多态)

    要求: 请实现笔记本电脑使用USB 鼠标、 USB 键盘的例子 1. USB 接口:包含打开设备、关闭设备功能 2. 笔记本类:包含开机功能、关机功能、使用 USB 设备功能 3. 鼠标类:实现 USB 接口,并具备点击功能 4. 键盘类:实现 USB 接口,并具备输入功能 (不需要具体实现,给出框架即

    2024年02月16日
    浏览(33)
  • Java 基础进阶篇(十七):反射概述及获取对象的方式

    反射是指对于任何一个Class类,在 “运行的时候”,不用创建对象,就可以直接得到这个类全部成分。 在运行时,可以直接得到这个类的构造器对象:Constructor 在运行时,可以直接得到这个类的成员变量对象:Field 在运行时,可以直接得到这个类的成员方法对象:Method 这种

    2024年02月07日
    浏览(29)
  • Java函数式接口

    3.1 函数式接口概述 函数式接口:有且仅有一个抽象方法的接口 Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口只有确保接口中有且仅有一个抽象方法, Java中的Lambda才能顺利地进行推导 如何检测一个接口是不是函数式接口呢? @Funct

    2024年02月08日
    浏览(23)
  • 【Java系列】函数式接口编程

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月05日
    浏览(31)
  • java一个接口多个实现得调用

    在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类: 根据具体实现类的类型进行调用: 利用接口的引用,根据条件判断调用不同的实现类: 在集合中存储不同的实现类对象,通过循环遍历调用: 使用工厂模式或依赖注入框架来动态获取不同

    2024年02月13日
    浏览(35)
  • Java基础:简单工厂模式、工厂方法模式和抽象工厂模式综合概述

    简单工厂模式、工厂方法模式和抽象工厂模式是面向对象设计中用来实现对象创建灵活性的三种不同形式的工厂模式。它们各自有其特点、适用场景及优缺点。以下是它们之间的区别以及对应的适用场景,以及示例说明: 简单工厂模式 定义 : 简单工厂模式提供一个静态方法

    2024年04月25日
    浏览(23)
  • 如何在 Java 中从另一个构造函数调用一个构造函数?

    是否可以从另一个(在同一个类中,而不是从子类中)调用构造函数?如果是怎么办?调用另一个构造函数的最佳方法是什么(如果有几种方法可以做到)? huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求 对的,这是可能的: 要链接到特定的超类构造函数而不是同一

    2024年02月03日
    浏览(44)
  • JAVA中的函数接口,你都用过吗

    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 在这篇文章中,我们将通过示例来学习 Java 函数式接口。 只包含一个抽象方法的接口称为函数式接口。 它可以有任意数量的默认静态方法,但只能包含一个抽象方法。它还可以声明对象类

    2024年02月05日
    浏览(38)
  • 用java写一个示例接口供前端调用

    以下是一个简单的Java接口示例,可以供前端调用: 在实际应用中,您需要根据具体的业务需求来定义接口方法,并在实现类中实现这些方法。例如,如果您需要实现一个登录接口,可以定义如下方法: 然后,您需要编写一个实现类来实现这个接口: 最后,您可以将这个实现

    2024年02月15日
    浏览(27)
  • 常用Java代码-Java中的Lambda表达式和函数式接口

    Java中的Lambda表达式和函数式接口是Java 8中引入的一种新特性,允许编写简洁、可读性强的代码。Lambda表达式允许将简单的代码块作为参数传递给函数,而函数式接口则是一种只有一个抽象方法的接口,可以用于定义Lambda表达式。 下面是一个Lambda表达式的示例: 在这个例子中

    2024年01月18日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包