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

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. [APUE] 进程环境

    APUE 一书的第七章学习笔记. 进程终止 有 8 种方式可以使得进程终止,5 种为正常方式: Return from main Calling exit() Calling _exit or _Ex ...

  2. 网络流量预测入门(二)之LSTM介绍

    目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...

  3. JavaScript中的迭代器和生成器[未排版]

    JavaScript中的迭代器 在软件开发领域,"迭代"的意思是按照顺序反复多次执行一段程序,通常会有明确的终止条件. ECMAScript 6规范新增了两个高级特性:迭代器和生成 ...

  4. http://golang.org/s/better-linker

    http://golang.org/s/better-linker The original linker was also simpler than it is now and its implem ...

  5. QTREE----树剖

    题目内容: ---------------------------------------------------- Query on a tree Time Limit: 851MS   Memor ...

  6. ReentrantReadWriteLock读写锁简单原理案例证明

    ReentrantReadWriteLock存在原因? 我们知道List的实现类ArrayList,LinkedList都是非线程安全的,Vector类通过用synchronized修饰方法保证了Li ...

  7. WeCenter (最新版) 前台RCE漏洞 (2020-02-22)

    漏洞通过phar触发反序列化漏洞. 触发点:./models/account.php 中的 associate_remote_avatar 方法: 搜索全局调用了该方法的地方: ./app/accou ...

  8. 内网渗透之信息收集-linux

    linux     系统信息         grep MemTotal /proc/meminfo #查看系统内存总量         cat /etc/issue #查看系统名称         ...

  9. c++指针 c指针 改变值

    1. #include <iostream>using namespace std;void move(int *p)    ====>void move(*&p){     ...

  10. 根据pom标签修改

    sed -i "s/<count>1<\/count>/<count>2<\/count>/g"  pom.xml