函数式编程(函数式接口):一个接口只包含一个方法实现

public interface Lambda{
void method();
} // 调用 Lambda lambda = new Lambda(){ }; Lambda lambda1 = () - >{ }; Lambda lambda2 = () ->xxx;
Function接口,一个参数对应一个返回值
Supplier 一个输出
Consumer一个输入
BiFuction 两个输入一个输出
BiConsumer 两个输入

方法引用

  • 静态方法引用

    类名::staticMethod, lambda:(args) ——>类名.staticMethod(args);

  • 实例方法引用

    实例::实例方法,lambda:(args)——>实例.实例方法(args);

  • 对象方法引用

    类名::实例方法,lambda:(实例, args) ---> 实例.实例方法(args); 第一个参数类型必须为实例方法对应的类

  • 构造方法引用

    类名::new,lambda:(args) ---->new 类名(args);

package Lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Supplier; public class Test {
public Test(){
System.out.println("create");
}
public static void main(String[] args) {
// final Lambda lambda = Test::method1;
// lambda.method(1); // List<Lambda> lambdas = new ArrayList<Lambda>();
// for (int i = 0; i < 10; i++) {
// lambdas.add(Test::method1);
// }
//
// for (int i = 0; i < 10; i++) {
// lambdas.get(i).method(i);
// }
// Lambda lambda = new Test()::method;
// lambda.method();
// Lambda lambda = ()->new Test().method();
// lambda.method();
// Lambda lambda = Test::new;
// lambda.method();
// Lambda lambda = ()->new Test();
// lambda.method();
// 静态方法
Lambda lambda = Test::method1;
Lambda lambda4 = () -> Test.method1();
// 实例方法
Lambda lambda1 = new Test()::method;
Lambda lambda5 = ()-> new Test().method();
// 对象方法,要求前面接口的泛型类型需要实例方法的类类型一直
// Lambda lambda2 = Test::method;
Consumer<Test> consumer0 = (s) -> new Test().method1("hhhh");
Consumer<Test> consumer =Test::method;
// 构造方法
Lambda lambda3 = Test::new;
Lambda lambda7 = ()->new Test();
} void method(){
System.out.println("method");
} static void method1(String s){
System.out.println(s);
}
}
高级应用

用一个集合存放多个方法的引用,用的时候再调用

        List<Lambda> lambdas = new ArrayList<Lambda>();
for (int i = 0; i < 10; i++) {
lambdas.add(Test::method1);
} for (int i = 0; i < 10; i++) {
lambdas.get(i).method(i);
}
函数式编程常用接口
Consumer<Integer> consumer = (i) -> System.out.println(i);
consumer.accept(10);
Supplier<Integer> supplier = () ->100;
System.out.println(supplier.get());
Function<String, Integer> function = (str)->str.length();
System.out.println(function.apply("嗨咯"));
BiFunction<String, String, Integer> biFunction = (str1, str2)->str1.length()+str2.length();
System.out.println(biFunction.apply("嗨喽", "学习Java"));
将函数式接口作为参数
// 定义
static void method4(int i, Consumer<Integer> consumer){
consumer.accept(i); } static int method5(Supplier<Integer> supplier){
return supplier.get();
} static int method6(String s, Function<String, Integer> function){
return function.apply(s);
} static int method7(String s1, String s2, BiFunction<String, String, Integer> biFunction){
return biFunction.apply(s1, s2);
} // 调用
Consumer<Integer> consumer = (i) -> System.out.println(i);
consumer.accept(10);
Supplier<Integer> supplier = () ->100;
System.out.println(supplier.get());
Function<String, Integer> function = (str)->str.length();
System.out.println(function.apply("嗨咯"));
BiFunction<String, String, Integer> biFunction = (str1, str2)->str1.length()+str2.length();
System.out.println(biFunction.apply("嗨喽", "学习Java")); for (int i = 0; i < 20; i++) {
method4(i,consumer);
System.out.println(method5(supplier));
System.out.println(method6(String.valueOf(i), function));
System.out.println(method7(String.valueOf(i), String.valueOf(i), biFunction));
}

Java中的Lambda匿名函数后续的更多相关文章

  1. Java中的lambda匿名函数使用

    Java中的lambda匿名函数使用 lambda匿名函数的使用是为了满足某些情况下需要临时定义函数,或者事先定义,需要时才使用.在python里面,lambda表达式的表达方式为:lambda 参数 ...

  2. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  3. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  4. 理解和运用Java中的Lambda

    前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...

  5. lambda匿名函数透析

    lambda匿名函数透析 目录 1       匿名函数的作用... 1 2       匿名函数的格式... 1 3       匿名函数实例代码... 3   1         匿名函数的作用 ...

  6. lambda 匿名函数

    # 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...

  7. 当列表推导式遇到lambda(匿名函数)

    Python这么优雅的语言,我也是醉了...... 事情由一段代码引发,请看: 上述的列表推导式+lambda表达式+for循环,他们碰撞出来的结果搞的人晕头转向,咱们逐步来分析一下他们到底是个什么鬼 ...

  8. lambda匿名函数和他的小伙伴(处理大量数据的时候用到)

    lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...

  9. lambda匿名函数,sorted(),filter(),map(),递归函数

    1.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n* ...

随机推荐

  1. 本地Mac通过堡垒机代理实现跨堡垒机scp问题

    近日,公司在跳板机前架设了堡垒机,以防止ssh攻击,但这带来一个问题,我们平常直接ssh跳板机,可以直接使用scp来上传或下载跳板机数据到本地 架设堡垒之后经常使用的scp工具不好用了 于是本期就来解 ...

  2. 对象存储 COS 帮您轻松搞定跨域访问需求

    背景 早期为了避免 CSRF(跨站请求伪造) 攻击,浏览器引入了 "同源策略" 机制.如果两个 URL 的协议,主机名(域名/IP),端口号一致,则视为这两个 URL " ...

  3. 当Vue可视化工具创建不了项目时的解决办法!

    当Vue可视化工具创建不了项目时的解决办法! 当你尝试用可视化工具创建一个Vue的项目的时候,报错, 出现什么indexOf什么什么的错误! 我的解决办法是把可视化工具删除掉,重新下载! 如果你是 n ...

  4. 初识JavaScript和jQuery

    JavaScript 1.特性 ①脚本语言.JavaScript是一种解释型的脚本语言,C.C++.Java等语言先编译后执行, 而JavaScript是在程序的运行过程中逐行进行解释. ②基于对象. ...

  5. (Oracle)预定义异常

    预定义异常: 为了 Oracle 开发和维护的方便,在 Oracle 异常中,为常见的异常码定义了对应的异常名称,称为预定义异常,常见的预定义异常有: 异常名称 异常码 描述 DUP_VAL_ON_I ...

  6. loj10087

    Southwestern Europe 2002,题面可参考 POJ 1201. 给定 n 个闭区间 [a_i,b_i] 和 n 个整数c_i .你需要构造一个整数集合Z ,使得对于任意i (1< ...

  7. 从一片森林(JavaScript)到另一片森林(C++)

    从JavaScript到C Plus Plus 作为一个忠诚的Web开发者,JavaScript几乎是我这一年多以来的首选,不管是开发网站后端服务,还是开发跨端应用,我都会首选一个使用JavaScri ...

  8. 不要在nodejs中阻塞event loop

    目录 简介 event loop和worker pool event loop和worker pool中的queue 阻塞event loop event loop的时间复杂度 Event Loop中 ...

  9. workflow定时任务部分失败

    workflow遇到一个问题,每天定时任务导致部分失败,截图如下 目前这个问题现场出现过是重启wf解决的 ,但是也给研发排查了,根本原因不清楚,不确保现场还会再遇到.

  10. [SCOI2009] [BZOJ1026] windy数

    windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?\(1 \le A \le ...