首页 > 编程语言 >【java8新特性】01:函数式编程及Lambda入门

【java8新特性】01:函数式编程及Lambda入门

时间:2022-09-18 15:13:22浏览次数:104  
标签:01 省略 Thread 代码 线程 简化 java8 Lambda

我们首先需要先了解什么是函数式编程、函数式编程是一种结构化编程范式、类似于数学函数、它关注的重点在于数据操作、或者说它所提倡的思想是做什么,而不是如何去做。

自Jdk8中开始、它也支持函数式编程、函数式编程的关注重点在于参数列表、代码的执行逻辑、将函数以参数的形式进行传递、搭配Jdk8语法糖Lambda闭包能够使得代码更加简化和优雅。

lambda表达式

Lambda表达式是Jdk8推出的语法糖、"可推导即可省略"就是Lambda的核心思想、所谓的可推导即可省略指的是能够通过当前上下文推导出来的内容都可用进行省略、如一些格式化的代码、方法修饰符,数据类型等。

Lambda表达式的基本语法:() -> {}

():方法的参数列表,参数类型可省略,但如果指定一个参数类型后则其他所有参数类型都必须指定参数类型,如果参数列表参数有且只有一个的情况下,连()都能够进行省略。

{}:代码执行逻辑,也就是具体方法所需要执行的代码、当代码片段只有一行或仅有一行返回给调用环境(return)的时候也可以将{}进行省略。

->:Lambda表达式的格式化代码、无法省略、我们可以认为它是一个发送的标识、() ->{} 就是将左侧的参数列表"发送"到右侧代码片段中。

lambda基础语法

public class Main{

    public static void main(String[] args) {
        // 我们单独开一条线程要做某些操作,但又不想单独对线程写个实现类,我们通常可以使用匿名内部类的方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(String.format("%s:%s","我是一个匿名内部类的线程",Thread.currentThread().getName()));
            }
        }).start();
        // 以上的匿名内部类实现接口的方式非常常见,但实际上大部分都是没有意义的格式化代码,如果我们使用Lambda表达式进行简化
        new Thread(()->{
            System.out.println(String.format("%s:%s","我是一个lambda的简化的线程",Thread.currentThread().getName()));
        }).start();
        /**
         * 我们发现通过lambda表达式后确实省略了很多代码:
         * new Runnable() 被简化成了 ()
         * @Override public void run() 被简化成了 {}
         * 以上的代码为什么能被Lambda表达式简化呢?
         * 因为Lambda只关注参数列表和执行逻辑(输入和输出),其余的格式化代码它并不关注,所以都是可以进行省略。
         * 但需要注意的并不是所有的代码都能够使用Lambda表达式进行简化的,需要满足以下两个条件:
         * 1.匿名内部类必须是一个接口
         * 2.该接口有且只有一个需要实现的抽象方法
         */
        new Thread(()-> System.out.println(String.format("%s:%s","我是一个lambda简化再简化的线程",Thread.currentThread().getName()))).start();
        //  因为输出只有一行代码,所以连{}都可以省略。
        /**
         * 最终结果:
         * 我是一个匿名内部类的线程:Thread-0
         * 我是一个lambda的简化的线程:Thread-1
         * 我是一个lambda简化再简化的线程:Thread-2
         */
    }
}

标签:01,省略,Thread,代码,线程,简化,java8,Lambda
From: https://www.cnblogs.com/yook2r3r/p/16704701.html

相关文章

  • spring-boot-01-helloworld-1.0-SNAPSHOT.jar中没有主清单属性【解决方案】
    问题D:>java-jarspring-boot-01-helloworld-1.0-SNAPSHOT.jarspring-boot-01-helloworld-1.0-SNAPSHOT.jar中没有主清单属性在这里有一个问题就是主清单属性是什么?......
  • 20201220蔡笃俊《信息安全系统设计与实现》第十章学习笔记
    一、任务内容自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈......
  • SQL2008至SQL2019缩小日志
    USEabframeworkf2DECLARE@LogFileLogicalNamesysnameSELECT@LogFileLogicalName=NameFROMsys.database_filesWHEREType=1PRINT@LogFileLogicalNameDBCCSHRINK......
  • NOIP 2012 Vigenère 密码
    //(waterproblem)#include<bits/stdc++.h>//#pragmaGCCoptimize(3)usingnamespacestd;intmain(){ strings1,s2; getline(cin,s1);getline(cin,s2); intl1......
  • NOIP 2015 神奇的幻方
    #include<bits/stdc++.h>usingnamespacestd;intn,a[40][40],x,y;intmain(){ cin>>n; x=1,y=(n+1)/2; for(inti=1;i<=n*n;i++){ a[x][y]=i; if(!a[(x-2+n)%n......
  • 算法中的最优化方法01
    算法中的最优化方法0100课程简介优化尽可能用最佳的方式处理一下事项计算机中基于优化的算法多准则控制器的设计模糊建模中的聚类机器人轨迹规划流程工业中的调度......
  • mosquitto在windows10中VS2019进行编译出lib和dll
    mosquitto在Windows编译需要环境如下:1、cmake,安装Windows版的cmake。2、VS2019安装;3、openssl安装;4、mosquitto源码;5、windows版的pthread下载库。其中的cmake和vs20......
  • 20201320第三周学习笔记
    sh编程sh脚本sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。创建mysh:1#!/bin/bash2#commentline3echohello 使用chmod-xm......
  • camunda_01_documents
    官方文档camunda官方文档邵晨峰翻译的官网流程引擎系列文章邵晨峰翻译的官方快速入门教程中文版(完整版)分享牛-Camunda教程|Camunda视频专栏博客博客园-我不是大......
  • 使用 Amazon Rekognition、Lambda 和 JavaScript 进行面部识别
    使用AmazonRekognition、Lambda和JavaScript进行面部识别创建面部搜索lambda函数以按图像搜索面部亚马逊识别亚马逊识别是一个基于云的SAAS平台提供计算机......