Java的lamda表达式/函数式接口/流式计算

在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算。在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率。lambda表达式,函数式接口,流式计算单个来用确实非常难用,但是整合到一起,就会发生非常奇妙的反应。

lambda表达式

lambda表达式允许把函数作为一个方法的参数。即,函数作为参数传递进方法。

lambda语法

(parameters) -> expression
OR
(parameters) -> {statements;}

lambada表达式的几个重要特征:

  • 可选类型声明:不需要申明参数类型,编译器可以统一识别参数类型
  • 可选参数圆括号:一个参数无需定义圆括号。但是多个参数需要定义圆括。
  • 可选大括号:如果主体只包含了一个语句,就不需要使用大括号。
  • 可选返回关键字:如果主体只有一个表达式返回值,编译器会自动返回值。
// 1. 不需要参数,直接返回值
() -> 3

// 2. 接收一个参数,返回其两倍
x -> 2 * x

// 3. 接收两个数字, 返回差
(x, y) -> x - y

lambda reference方法

public class Test {
    public int addOne(int a){
        return a;
    }
    public static int ssaddOne(int a){
        return a;
    }
    public static void main(String[] args) {
        BiFunction addOne = Test::addOne;
        Function addOne1 = new Test()::addOne;
        Function ssaddOne = Test::ssaddOne;
    }
}

函数式接口

什么是函数式接口

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

四大函数式接口

`java
java.util.function.Consumer

// 消费者:接收一个参数,没有返回值
@FunctionalInterface
public interface Consumer {
/**
* Performs this operation on the given argument.

 *
 * @param t the input argument
 */
void accept(T t);

}
java.util.function.Supplier

// 提供者:不接受任何参数,返回会一个参数
@FunctionalInterface
public interface Supplier {

/**
 * Gets a result.

 *
 * @return a result
 */
T get();

}

Original: https://www.cnblogs.com/hardyzhou/p/16610613.html
Author: hardyzhou
Title: Java的lamda表达式/函数式接口/流式计算

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

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

(0)

大家都在看

  • vue将字符串中的数字替换为*

    再一次开发中碰到一个问题,为了防止交易双方在备注中互留电话导致诈骗的发生,做了一个自动将备注中的数字替换为*的需求 话不多说,上代码 let output = []; let te…

    Java 2023年6月14日
    066
  • MongoDB常用命令(2)

    1、创建数据库 use testdb 2、创建集合 db.t_member.insert({name:"zhaomin",age:23}) 3、查询 db.t_…

    Java 2023年6月7日
    074
  • 64位虚拟机Guest OS安装错误:0xC0000225

    1, CPU必须支持Intel VT-x/AMD-V。并且在BIOS及虚拟机软件中启用。 2, 虚拟机要启用 IO ACPI。 Original: https://www.cnbl…

    Java 2023年5月30日
    060
  • 从上下文中获取所有的原生controller

    1 /** 2 * 获取项目所有被注解修饰的url 3 * @param run 4 */ 5 public void getAllUrl(ConfigurableApplicat…

    Java 2023年6月6日
    080
  • 容器-promQL语法之内存指标

    在容器内进行内存监控的常用指标包括 1、 内存中的cache用量 2、 常驻的内存用量 3、 交换分区用量 4、 内存的总占用量 由于container_memory_usage_…

    Java 2023年5月30日
    084
  • vmware 主机与虚拟机之间文件共享及复制粘贴问题

    主要是宿主机的防火墙设置问题. 然后: sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-too…

    Java 2023年5月30日
    071
  • Sigar java 服务器信息探针、监控

    package org.fh.controller.tools; import java.net.InetAddress; import java.util.HashMap; im…

    Java 2023年6月7日
    085
  • 一个 Java 正则表达式例子

    今天在项目里看到用 Python 正则表达式的时候,用到 group,没有仔细看。正好学习 Java 正则表达式,对 group 多留意了一下。 上代码: 打印: 这里有两个 gr…

    Java 2023年5月29日
    075
  • KMP算法,看这篇就够了!

    普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串”a b a b c a b c a c b a b”中,寻…

    Java 2023年6月9日
    094
  • ab test压力测试

    之前做性能调试的时候一直用的JMeter压测,最近发现一款简单易用的压力测试工具。 ab(Apache benchmark)是一款常用的压力测试工具,是Apache附带的一个小工具…

    Java 2023年6月8日
    0103
  • 入门clash 及 proxy 坑点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    081
  • Flink总结

    从头儿过一遍书,做了些摘要。SQL那里还没仔细复习。 核心目标:数据流上的有状态计算 具体定位:以内存执行速度(速度快)和任意规模来执行计算(可扩展性强) -> 小松鼠快速灵…

    Java 2023年6月8日
    075
  • Spring注解开发_Spring容器创建概述

    浅尝Spring注解开发,基于Spring 4.3.12概述Spring容器创建的过程,包括12个方法的执行 概述12个方法 //获取ioc容器 AnnotationConfigA…

    Java 2023年6月5日
    071
  • HIT软构博客9–复用性原则

    Liskov替换原则(LSP) Animal a = new Animal(); Animal c1 = new Cat(); Cat c2 = new Cat(); 编译器在静态…

    Java 2023年6月5日
    091
  • Ubuntu16桌面版编译OpenCV4的java库和so库

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kuberne…

    Java 2023年6月8日
    098
  • [Java] LinkedHashMap 源码简要分析

    java;gutter:true; private static class Entry extends HashMap.Entry // 继承自HashMap的Entry(已有k…

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