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

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. JavaScript中eval的替代方法

    引自:https://www.cnblogs.com/lxg0/p/7805266.html 通常我们在使用ajax获取到后台返回的json数据时,需要使用 eval 这个方法将json字符串转换成对 ...

  2. 小程序map学习:使用map获取当前位置并显示出来

    在小程序开发的过程中,我碰到过一个做map的需求,在我开发的时候我碰到了一些问题,这里总结出来,给大家一些解决方法. 简易小程序dome下载 代码片段分享: js部分: var amapFile = ...

  3. 什么是Etcd,如何运维Etcd ?

    介绍 ETCD 是一个分布式.可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据:当然,它不仅仅用于存储,还提供配置共享及服务发现:基于Go语言实现. ETCD的特点 简单: ...

  4. bcprov-jdk15on包用于创建CSR(证书请求)

    <!-- Eureka注册中心客户端依赖 --> <dependency> <groupId>org.springframework.cloud</group ...

  5. Spring听课笔记(tg)

    0. 地址:https://www.bilibili.com/video/av21335209 1.综述,Spring主要的复习要点集中在以下几点 -- Spring的整体结构,Maven依赖(环境搭 ...

  6. java线程缓存刷新的疑问

    https://www.jianshu.com/p/3c06ffbf0d52 import java.util.concurrent.TimeUnit; public class VolatileFo ...

  7. Spring Filter过滤表单中的非法字符

    使用Spring Filter过滤表单中的非法字符 1 package test.filter; 2 3 import java.io.IOException; 4 import java.util. ...

  8. redis性能优化、内存分析及优化

    redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...

  9. 深信服上网行为管理配置跨三层MAC识别

    1.在认证高级选项里点击新增 如果PC的IP和MAC存在于多个三层交换机,则需新增多个. 点击上图"查看服务器信息"测试能否从交换机获取PC的IP和MAC,有返回结果则能正常获取, ...

  10. MacOS Big Sur开HiDPI

    我自己的环境: 开启hidpi的目的是为了让显示更加细腻,代价是缩小了显示范围. 自己在网上看了很多帖子,也尝试了几种,有些方法已经不再适合Big Sur系统了,所以本文提供一种可用的,在Big Su ...