Java函数式编程

news2024/10/3 10:33:59

从JDK8开始java支持函数式编程,函数式编程是面向数学的抽象,将计算描述为一种表达式求值,函数式程序就是一个表达式。JDK也提供了几个常用的函数式接口。

java的函数式编程还没有例如js那样的规范和深奥, 在函数式编程中,函数也是一等公民,可以被当做参数传递,可以被赋值,被引用,可以把它当做一种数据类型来对待。

Consumer接口

Java Consumer接口来自Java 8中引入的 java.util.function包。

Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目标(传递一个参数执行特定的功能)。Consumer的功能接口是一个接受单一参数并且不返回任何结果的操作。Consumer的功能方法是accept(T t)andThen(Consumer consumer)

Consumer源码如下:
在这里插入图片描述

源码提供的两种方法分别有以下功能:

  • accept方法接受入参为任意指定类型;
  • andThen方法参数和返回值都是表达式,用于执行某种功能。
import java.util.function.Consumer;

public class ConsumerTest {
    public static void main(String[] args) {

        //使用函数接口定义表达式,可复用的表达式
        Consumer<String> consumer = (String s)->{
            System.out.println(s);
        };

        consumer.accept("hello");
        
        consumer.accept("world");
    }


}

在这里插入图片描述

import java.util.function.Consumer;

public class ConsumerTest {
    public static void main(String[] args) {

        //使用函数接口定义表达式,可复用的表达式
        Consumer<String> consumer = (String s)->{
            System.out.println(s);
        };

        consumer.accept("hello");

        consumer.accept("world");

        //定义表达式簇
        Consumer<String> consumer1 = (String s) ->{
            String str = s.concat("连接一段时间!");
            System.out.println(str);
        };

        consumer.andThen(consumer1).accept("hello");

    }


}

在这里插入图片描述

Lambda表达式

public class ConsumerTest {
    public static void main(String[] args) {
        //lambda表达式

        AddMethod addMethod = (int a,int b)->{
            return a+b;
        };
        System.out.println(addMethod.add(1,2));
    }


}

interface AddMethod{
    int add(int a,int b);
}

https://www.w3cschool.cn/article/65422543.html

双冒号::符号

::在Java里面也可以叫做方法引用,就上面说的函数也是一等公民,这里就类似把方法作为参数传入。lambda表达式都类似使用匿名类实现接口的方法,然而还有一种情况我们并不想要自己去实现接口的方法,只是想传进去一个已经有过实现了的方法,就可以使用::

例如在forEach方法中,参数是函数:
在这里插入图片描述

List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));

//lambda表达式
list.forEach((k)-> System.out.println(k));

语法规则如下:
类名::静态方法名 或者 类的实例::实例方法

常见的::的用法都在forEach方法中,另外参数是Consumer的也可以使用

public class Test3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList();
        list.add("hello");
        list.add("world");
        list.add("yes");
        list.forEach(Person::printNA);
    }
}
class Person {

    public static void printNA(String name){
        System.out.println("姓名"+name);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯每日一题:不同路径数(dfs深度优先)

给定一个 nm的二维矩阵&#xff0c;其中的每个元素都是一个 [1,9] 之间的正整数。 从矩阵中的任意位置出发&#xff0c;每次可以沿上下左右四个方向前进一步&#xff0c;走过的位置可以重复走。 走了 k 次后&#xff0c;经过的元素会构成一个 (k1) 位数。 请求出一共可以走出…

浅谈功能测试和性能测试的区别

刚刚入门软件测试的宝子&#xff0c;可能经常会看到&#xff1a;功能测试、性能测试&#xff0c;这些到底是什么呀&#xff1f;那我就带大家了解一下~ 一、定义 功能测试 功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0…

操作指南:如何高效使用Facebook Messenger销售(二)

上一篇文章我们介绍了使用Facebook Messenger作为销售渠道的定义、好处及注意事项&#xff0c;本节我们将详细介绍怎么将Facebook Messenger销售与SaleSmartly&#xff08;ss客服&#xff09;结合&#xff0c;实现一站式管理多主页配图来源&#xff1a;SaleSmartly&#xff08;…

喀秋莎Camtasia2023最新版本电脑录屏剪辑软件

录屏软件的鼻祖是techSmith 的喀秋莎&#xff08;Techsmith Camtasia Studio&#xff09;&#xff0c;视频编辑软件Camtasia 2023发布&#xff0c;十大新功能放出!作为一个自媒体人&#xff0c;每天都要录制编辑视频&#xff0c;选择一个好的视频编辑工具就是大家首先面临的一个…

招投标管理系统-适合于招标代理、政府采购、企业采购、工程交易等业务的企业

招投标管理系统-适合于招标代理、政府采购、企业采购、工程交易等业务的企业 招投标管理系统是一个用于内部业务项目管理的应用平台。以项目为主线&#xff0c;从项目立项&#xff0c;资格预审&#xff0c;标书编制审核&#xff0c;招标公告&#xff0c;项目开标&#xff0c;项…

Android Kotlin实战之高阶使用泛型扩展协程懒加载详解

前言&#xff1a; 通过前面几篇文章&#xff0c;我们已基本掌握kotlin的基本写法与使用&#xff0c;但是在开发过程中&#xff0c;以及一些开源的API还是会出现大家模式的高阶玩法以及问题&#xff0c;如何避免&#xff0c;接下来讲解针对原来的文章进行一些扩展&#xff0c;解…

【10K功能测试】-【20K自动化测试】之间的区别

前言 按测试执行的类型来分&#xff1a;功能测试、自动化测试 1&#xff0e;功能测试 功能测试俗称点点点测试。初级测试人员的主要测试任务就是执行测试工程师所写的测试用 例&#xff0c;记录用例的执行状态及bug情况。与开发人员进行交互直到bug被修复。 功能测试理论上是…

顺丰同城测试开发一面 49min答案,全文7000字,面试总结都在这里了

今天给大家分享一份顺丰同城的测试开发一面面试真题。老规矩&#xff0c;当你看到这份面试题的时候&#xff0c;先不要着急去看答案&#xff0c;你可以想想假如你在面试现场&#xff0c;你会怎么回答&#xff1f;这个思考的过程其实也是很重要的。 全文7000字干货&#xff0c;…

ADC0832的AD模数转换原理及编程

✅作者简介&#xff1a;嵌入式领域优质创作者&#xff0c;博客专家 ✨个人主页&#xff1a;咸鱼弟 &#x1f525;系列专栏&#xff1a;单片机设计专栏 &#x1f4c3;推荐一款求职面试、刷题神器&#x1f449;注册免费刷题 目录 一、描述 二、模数转换原理&#xff1a; 三、…

Gorm -- 添加记录

文章目录添加单条记录直接添加模型对象赋予默认值方法一&#xff1a; gorm 标签赋予默认值方法二&#xff1a; 设置钩子方法&#xff08;Hooks&#xff09;指定字段插入插入时忽略某些字段插入时禁止使用钩子方法添加多条记录通过对象列表插入通过字典列表插入在字典中使用SQL内…

【Linux】工具(3)——gcc/g++

咱们继续进阶&#xff0c;接下来进入到Linux工具中gcc和g的学习在本章博客正式开始介绍之前&#xff0c;我们先要弄清楚程序是怎么翻译的&#xff1a;C语言程序环境一、什么是gcc/g&#x1f4cc;gcc是一个c编译器&#xff0c; g是c编译器。我们根据代码的后缀名来判断用哪个编译…

NCRE计算机等级考试Python真题(十)

第十套试题1、数据库系统的核心是___________。A.数据库管理系统B.数据模型C.软件工具D.数据库正确答案&#xff1a; A2、下列叙述中正确的是___________。A.线性表链式存储结构的存储空间可以是连续的&#xff0c;也可以是不连续的B.线性表链式存储结构与顺序存储结构的存储空…

Stable Diffusion原理详解

Stable Diffusion原理详解 最近AI图像生成异常火爆&#xff0c;听说鹅厂都开始用AI图像生成做前期设定了&#xff0c;小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像&#xff0c;背后离不开Stable Diffusion算法。 Stable Diffusion…

大容量存储(涉及到的硬盘存取的原理)

磁盘的结构 我们简单分析一下&#xff0c;这里是计组的知识&#xff0c;大家可以自己多看些资料 柱面是基本单位 我们可以看到内圈的空间比外圈的要小&#xff0c;但是我们的每个磁道里的扇区是一样的&#xff0c;所以外圈的数据密度分布比内圈要更分散一些&#xff0c;这样就…

LeetCode 235. 二叉搜索树的最近公共祖先

LeetCode 235. 二叉搜索树的最近公共祖先 难度&#xff1a;middle\color{orange}{middle}middle 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先…

解决pycharm中报ModuleNotFoundError: No module named ‘tensorflow‘错误

在pycharm中编写python程序时&#xff0c;遇到了报ModuleNotFoundError:no module named XXX的错误。以下是我的解决方法。 目录 一、错误现象 二、原因分析 三、解决方法 四、更多错误解决方法 一、错误现象 执行python程序时&#xff0c;报错&#xff0c;错误信息为Modu…

python字符串练习

python字符串练习 1.去掉字符串中所有的空格 s This is a demo print(s.replace( , )) 2.获取字符串中数字的个数 data input("请输入一些字符串&#xff1a;") a 0 for i in data:if i.isdigit():a a 1 print("数字个数:", a)3.将字母全部转换为…

Cypher中的聚合

深解Cypher中的聚合 值或计数的聚合要么从查询返回&#xff0c;要么用作多步查询下一部分的输入。查看数据模型 CALL db.schema.visualization() 查看图中节点的属性类型 CALL db.schema.notetypeproperties() 查看图中关系的属性类型 CALL db.schema.reltypeproperties() C…

普通二本,去过阿里外包,到现在年薪40W+的高级测试工程师,我的两年转行经历...

我是一个普通二本大学机械专业毕业&#xff0c;14年毕业&#xff0c;16年转行&#xff0c;目前做IT行业的软件测试已经有3年多&#xff0c;职位是高级软件测试工程师&#xff0c;坐标上海…我想现在我也有一点资格谈论关于转行这个话题&#xff1b;希望你在决定转行之前&#x…

爆品分析第4期 | 从周销12件到3700+件,这款收腰裤热度和口碑都爆了!

衣食住行&#xff0c;衣是排在第一位的&#xff0c;作为复购率最高的类目之一&#xff0c;服饰一直是TikTok上电商选品的风向标&#xff0c;是衡量电商发展情况的重要参考指标。随着疫情的结束和经济的日渐好转&#xff0c;消费者对服装类的需求上升。除了时装、T恤等日常消费的…