Java8之函数式接口

一、简介:

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。

二、代码举例:

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author :gongxr
 * @description:函数式接口用法举例(FunctionalInterface)
 * 只包含一个抽象方法的接口,称为函数式接口。
 * 可以通过Lambda表达式来创建该接口的对象。
 * 在任意函数式接口上使用@FunctionalInterface注解,javadoc会包含函数式接口的声明。
 */
public class FunctionalInterfaceDemo {

    /**
     * 自定义函数式接口
     */
    @FunctionalInterface
    interface MyFun {
        int fun(int a, int b);
    }

    public int doSomething(int a, int b, MyFun myFun) {
        return myFun.fun(a, b);
    }

    @Test
    public void testFunctionalInterface() {
        int n = doSomething(1, 2, (x, y) -> {
            int sum = x + y;
            return sum;
        });
        System.out.println("fun() -> " + n);
    }

    /**
     * 1.Consumer : 消费型接口,void accept(T t);
     * 接受一个输入参数并且无返回的操作
     */
    @Test
    public void test() {
        happy(10000, (m) -> System.out.println("大保健花了:" + m));
    }

    public void happy(double money, Consumer con) {
        con.accept(money);
    }

    /**
     * 2.Supplier : 供给型接口,T get();
     * 无参数,返回一个结果。
     */
    @Test
    public void test1() {
        List numList = getNumList(10, () -> (int) (Math.random() * 100));
        for (Integer integer : numList) {
            System.out.println(integer);
        }
    }

    //          需求:产生指定个数的整数,并放入集合中
    public List getNumList(int num, Supplier sup) {
        List list = new ArrayList<>();
        for (int i = 0; i < num; i++) {

            Integer n = sup.get();
            list.add(n);

        }
        return list;
    }

    /**
     * 3.Function : 函数型接口,R apply(T t);
     * 接受一个输入参数,返回一个结果。
     ,>*/
    @Test
    public void test2() {
        String trimStr = strHandler("\t\t  你好,world!   ", (str) -> str.trim());
        System.out.println(trimStr);

        String sumString = strHandler("Helloworld!", (str) -> str.substring(2, 4));
        System.out.println(sumString);
    }

    //      需求:用于处理字符串
    public String strHandler(String str, Function fun) {
        return fun.apply(str);
    }

    /**
     * 4.Predicate : 断言型接口,boolean test(T t);
     * 接受一个输入参数,返回一个布尔值结果。
     */
    @Test
    public void test3() {
        List list = Arrays.asList("Hello", "world", "hi", "o", "123");
        List filterStr = filterStr(list, (str) -> str.length() > 1);
        for (String string : filterStr) {
            System.out.println(string);
        }
    }

    //      需求:将满足条件的字符串,放入集合中
    public List filterStr(List list, Predicate pre) {
        List list2 = new ArrayList<>();
        for (String str : list) {
            if (pre.test(str)) {
                list2.add(str);
            }
        }
        return list2;
    }

},>

Original: https://www.cnblogs.com/gongxr/p/14511447.html
Author: 星瑞
Title: Java8之函数式接口

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537807/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 哈工大软件构造Lab3(2022)

    (防扒小助手) 本人CSDN博客: https://blog.csdn.net/m0_61753302 ; 本人博客园博客(同步CSDN): 何以牵尘 – 博客园 (c…

    Java 2023年6月9日
    066
  • Java 之 String 类型

    因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 首先String不属于8种基本数据类型(byte, char,…

    Java 2023年5月29日
    065
  • Spring AOP

    一、AOP的概念 1、AOP:面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分的耦合度降低。提高程序的可重用性,同时提高了开发效率 2、AOP通俗…

    Java 2023年6月7日
    065
  • 分布式事务

    0.理论基础 0.1.CAP定理 Consistency(一致性) Availability(可用性) Partition tolerance (分区容错性) 0.1.1.矛盾 在…

    Java 2023年6月9日
    088
  • 为什么一定要从DevOps走向BizDevOps?

    数字经济时代,数字化转型成为社会的普遍共识和行动。越来越多的业务运行在数字化基座之上, 软件系统正成为业务创新的价值核心和创新引擎。在这一趋势下,软件产业面临着许多新挑战和新机遇:…

    Java 2023年6月8日
    072
  • 基于UML软件建模的企业人事管理系统

    前言 随着信息技术的发展和互联网环境的成熟,管理信息系统的技术更新函待解决。人事管理工作虽然由企业人事管理人员((HR)等负责,但随着企业规模的不断扩大,如果所有工作全部由HR来做…

    Java 2023年6月5日
    0109
  • SpringCloud微服务实战——搭建企业级开发框架(三十八):搭建ELK日志采集与分析系统

    一套好的日志分析系统可以详细记录系统的运行情况,方便我们定位分析系统性能瓶颈、查找定位系统问题。上一篇说明了日志的多种业务场景以及日志记录的实现方式,那么日志记录下来,相关人员就需…

    Java 2023年6月9日
    069
  • Vue学习之——–深入理解Vuex之多组件共享数据(2022/9/4)

    在上篇文章的基础上:Vue学习之——–深入理解Vuex之getters、mapState、mapGetters 1、在state中新增用户数组 …

    Java 2023年6月14日
    0105
  • rocketmq实现延迟队列精确到秒级实现方案4-基于rocketmq 默认支持18个等级来改造

    rocketmq开源版本支持18个等级的延迟方案, 开源rocketmq延迟队列实现: Original: https://www.cnblogs.com/tomj2ee/p/15…

    Java 2023年6月5日
    072
  • CSS 网页字体最佳实践

    一般在网页的字体设置中,可以将字体分类三类: 系统字体:使用系统自带的字体 兜底字体:当系统字体无法正常使用,而兜底的字体 Emoji 字体:显示网页中的表情字体 为了满足不同平台…

    Java 2023年6月8日
    096
  • Spring(五)-Spring的其他知识点

    1、细说ServletContext、WebApplicationContext、Servlet的初始化 参考博客–>细说ServletContext、WebAp…

    Java 2023年6月15日
    080
  • win10系统中修改hosts文件

    进入hosts文件目录 选择以管理员身份打开Windows PowerShell 输入cmd进入管理员界面,输入 notepad hosts编辑hosts文件 posted on2…

    Java 2023年6月15日
    079
  • 创建Springboot工程接收acticemq消息

    1、JMSFactory配置 <beans xmlns="http://www.springframework.org/schema/beans" xml…

    Java 2023年5月30日
    0119
  • 智慧树/知到 一键刷课脚本代码(网页自动版 2020最新版)

    本人亲测可用,两种代码皆可 功能: 自动设置 1.5倍速度(最快),静音,自动切换下一课,跳过答题弹窗 进入智慧树网页版 ,按键盘F12出现以下界面,点击Console(控制台),…

    Java 2023年6月9日
    0607
  • JavaWeb-html的基础

    html的基础 html(超文本标记语言),运行在浏览器端的静态解释型语言, JavaWeb基本概述 html的基本标签 html html是解释语言,浏览器容错的,可以有错误,编…

    Java 2023年6月5日
    079
  • SpringBoot2.x修改Redis序列化方式

    添加一个配置类即可: /** * @Author FengZeng * @Date 2022-03-22 13:43 * @Description TODO */ @Configu…

    Java 2023年6月9日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球