返回顶部
首页 > 资讯 > 后端开发 > Python >java理论基础函数式接口特点示例解析
  • 108
分享到

java理论基础函数式接口特点示例解析

2024-04-02 19:04:59 108人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、函数式接口是什么?二、函数式接口的特点三、default关键字四、jdk中的函数式接口举例五、自定义Comparator排序一、函数式接口是什么? 所谓的函数式接口,实际上就

一、函数式接口是什么?

所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口。我们上一节用到的Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。

只有一个抽象方法?那上图中的equals方法不是也没有函数体么?不急,和我一起往下看!

二、函数式接口的特点

接口有且仅有一个抽象方法,如上图的抽象方法compare

允许定义静态非抽象方法

允许定义默认defalut非抽象方法(default方法也是java8才有的,见下文)

允许java.lang.Object中的public方法,如上图的方法equals。

FunctionInterface注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错

甚至可以说:函数式接口是专门为lambda表达式准备的,lambda表达式是只实现接口中唯一的抽象方法的匿名实现类。

三、default关键字

顺便讲一下default关键字,在java8之前

接口是不能有方法的实现,所有方法全都是抽象方法

实现接口就必须实现接口里面的所有方法

这就导致一个问题:当一个接口有很多的实现类的时候,修改这个接口就变成了一个非常麻烦的事,需要修改这个接口的所有实现类。

这个问题困扰了java工程师许久,不过在java8中这个问题得到了解决,没错就是default方法

  • default方法可以有自己的默认实现,即有方法体。
  • 接口实现类可以不去实现default方法,并且可以使用default方法。

四、JDK中的函数式接口举例

java.lang.Runnable,

java.util.Comparator,

java.util.concurrent.Callable

java.util.function包下的接口,如Consumer、Predicate、Supplier等

五、自定义Comparator排序

我们自定义一个排序器,实现compare函数(函数式接口Comparator唯一的抽象方法)。返回0表示元素相等,-1表示前一个元素小于后一个元素,1表示前一个元素大于后一个元素。这个规则和java 8之前没什么区别。

下面代码用自定义接口实现类的的方式实现:按照年龄的倒序排序!

employees.sort(new Comparator<Employee>() {
    @Override
    public int compare(Employee em1, Employee em2) {
        if(em1.getAge() == em2.getAge()){
            return 0;
        }
        return em1.getAge() - em2.getAge() > 0 ? -1:1;
    }
});
employees.forEach(System.out::println);

最终的打印结果如下,按照年龄的自定义规则进行排序。

Employee(id=8, age=79, gender=M, firstName=Alex, lastName=Gussin)
Employee(id=7, age=68, gender=F, firstName=Melissa, lastName=Roy)
Employee(id=10, age=45, gender=M, firstName=Naveen, lastName=Jain)
Employee(id=3, age=43, gender=M, firstName=Ricky, lastName=Martin)
Employee(id=4, age=26, gender=M, firstName=Jon, lastName=Lowman)
Employee(id=1, age=23, gender=M, firstName=Rick, lastName=Beethovan)
Employee(id=5, age=19, gender=F, firstName=Cristine, lastName=Maria)
Employee(id=9, age=15, gender=F, firstName=Neetu, lastName=Singh)
Employee(id=6, age=15, gender=M, firstName=David, lastName=Feezor)
Employee(id=2, age=13, gender=F, firstName=Martina, lastName=HenGIS)

这段代码如果以lambda表达式简写。箭头左侧是参数,右侧是函数体,参数类型和返回值根据上下文自动判断。如下:

employees.sort((em1,em2) -> {
    if(em1.getAge() == em2.getAge()){
        return 0;
    }
    return em1.getAge() - em2.getAge() > 0 ? -1:1;
});
employees.forEach(System.out::println);

以上就是java理论基础函数式接口特点示例解析的详细内容,更多关于java理论基础函数式接口的资料请关注编程网其它相关文章!

--结束END--

本文标题: java理论基础函数式接口特点示例解析

本文链接: https://lsjlt.com/news/142710.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java理论基础函数式接口特点示例解析
    目录一、函数式接口是什么?二、函数式接口的特点三、default关键字四、JDK中的函数式接口举例五、自定义Comparator排序一、函数式接口是什么? 所谓的函数式接口,实际上就...
    99+
    2024-04-02
  • 【Java 基础篇】Java 函数式接口详解
    文章目录 导言一、函数式接口的概念二、函数式接口的语法三、函数式接口的使用方法四、常用的函数式接口总结 导言 函数式接口是 Java 8 引入的重要特性,它允许将函数作为参数传递给方法,或者作为返回值返回。函数式接口主要用于...
    99+
    2023-08-16
    java jvm 开发语言
  • java理论基础StreamAPI终端操作示例解析
    目录一、JavaStream管道数据处理操作二、ForEach和ForEachOrdered三、元素的收集collect3.1.收集为Set3.2.收集到List3.3.通用的收集方...
    99+
    2024-04-02
  • 《Java 基础篇》之函数式接口
    目录 1、函数式接口概述 2、函数式接口做为方法的参数 3、函数式接口作为方法的返回值 3、常用的函数式接口 3.1、Supplier [səˈplaɪə(r)] Supplier接口 3.2、Consumer接口 3.3、Predicat...
    99+
    2023-10-20
    java 开发语言
  • MySQL数据库基础篇SQL窗口函数示例解析教程
    目录本文简介正文介绍聚合函数 + over()排序函数 + over()ntile()函数 + over()偏移函数 + over()本文简介 前段时间,黄同学写了一篇《MySQL窗...
    99+
    2024-04-02
  • Java8函数式接口java.util.function速查的示例分析
    这篇文章给大家分享的是有关Java8函数式接口java.util.function速查的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。函数式接口概念函数式接口(Functional Interface)就...
    99+
    2023-06-20
  • Python基础常用内建函数图文示例解析
    目录abs()all()any()bin()bool()callable()abs() 返回一个数字的绝对值,它的参数可以是整数或者浮点数。举个例子: all() 参数为...
    99+
    2024-04-02
  • C语言基础函数用法示例详细解析
    目录函数函数定义函数一般格式C语言函数分类库函数库函数的分类库函数的学习自定义函数函数的参数实际参数形式参数函数的调用传值调用传址调用无参函数调用函数的声明和定义函数的声明函数的定义...
    99+
    2024-04-02
  • Java8中Lambda表达式与函数式接口的示例分析
    这篇文章将为大家详细讲解有关Java8中Lambda表达式与函数式接口的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java8被称作Java史上变化最大的一个版本。其中包含很多重要的新特性,最核...
    99+
    2023-05-30
    java lambda
  • Java中虚函数、抽象函数、抽象类、接口的示例分析
    这篇文章主要介绍Java中虚函数、抽象函数、抽象类、接口的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. Java虚函数虚函数的存在是为了多态。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调...
    99+
    2023-06-05
  • Java基础之JDBC连接数据库与基本操作的示例分析
    小编给大家分享一下Java基础之JDBC连接数据库与基本操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java可以用来干什么Java主要应用于:1....
    99+
    2023-06-14
  • 深入理解Java8新特性之Lambda表达式的基本语法和自定义函数式接口
    1.写在前面 目前我们学习Java主要用到的应该就是Java8了,或者说大部分企业当前使用的也是Java8。那么既然Java8的应用如此之广泛,一定有一些亮点所在: Lam...
    99+
    2024-04-02
  • Java零基础也看得懂的单例模式与final及抽象类和接口详解
    目录1.单例模式1.饿汉式和懒汉式的实现2.饿汉式3.懒汉式4.懒汉式和饿汉式的区别2.final的使用1.基本介绍2.使用场景3.使用注意事项和细节讨论3.抽象类1.基本介绍2.使...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作