一篇文章掌握lambda,function下41个类

简介: Java8 发布以来,lambda 表达式简化了代码,增强了阅读性,代码更加简洁。lambda 主要是给Java增加了函数式编程的方式。lambda表达式的实现就是functionInterface。

Java8 发布以来,lambda 表达式简化了代码,增强了阅读性,代码更加简洁。lambda 主要是给Java增加了函数式编程的方式。lambda表达式的实现就是functionInterface。


函数编程的最直接的表现在于将函数作为数据自由传递,结合泛型推导能力使代码表达能力获得飞一般的提升。同时Lambda表达式让你能够将函数作为方法参数或者将代码作为数据对待,让你发现“行级代码”优美。


lambda 的语法是 :
(输入)->{输出}
复制代码


只有一行代码时,可以不加括号,可以不写return。


IntSupplier func = ()-> 1;
复制代码


Java中的first class 是class ,所以底层来说是不支持函数式编程的,因为函数式编程语言的first class 是函数。为了增加函数式编程的思想,所以有了functionInterface这种解决方式。


英文翻译


单词 中文
consumer 消费者
supplier 生产者
function 函数
predicate 判断,预测

 

1.行为分类

ba262db34e27448c9bca5c168feae705~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

2.实现分类


1.function


命名方式: 输入类型To输出类型Function


2.Consumer


命名方式:输入类型Consumer


3.supplier


命名方式:输出类型Supplier


3.用法


package org.pdool.reflect;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
/**
* 玩家类 公众号:香菜聊游戏
*/
@AllArgsConstructor
public class Player {
   // 名字
   @Getter @Setter
   public String name;
   // 性别
   @Getter @Setter
   private int sex;
   // 年龄
   @Getter @Setter
   private int age;
   // 工资
   @Getter @Setter
   private int salary;
}
复制代码


在同步代码块的时候经常会到处添加synchronized,为了保证所有的代码都在player的同步下做,可以使用function,减少代码重复。


public Object doSynOnPlayer(Function<Player,Object> function){
       synchronized (player){
           return function.apply(this.player);
      }
  }
复制代码


4.自己实现  


package org.pdool.reflect;
/**
* 公众号:香菜聊游戏
*/
@FunctionalInterface
interface PlayerService {
   void apply(Player player);
}
public static void main(String[] args) throws Exception {
       Player player = new Player("香菜聊游戏", 1, 18, 3000);
       PlayerService func = (player1)-> System.out.println(player1.getSex());
       func.apply(player);
  }
复制代码


5.总结


上面这么多实现并不重要,只要记住函数式可以传递的,function<T,R>,一个入参,一个返回值。掌握了之后就会发现有些并不需要自己实现,有现成的何乐而不为。


。函数式编程的lambda现在很多语言都已经支持,java也有很好的api支持,可以试着接受这种方式,不用一下怎么才能发现不合适,说不定你能发现他的好。

目录
相关文章
|
5月前
|
消息中间件 Kubernetes NoSQL
c++ 11 中 function,lambda,bind
c++ 11 中 function,lambda,bind
|
5月前
|
存储 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(下)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
73 5
|
3月前
|
机器学习/深度学习
现代深度学习框架构建问题之Sigmoid类实现Function接口如何解决
现代深度学习框架构建问题之Sigmoid类实现Function接口如何解决
24 4
|
3月前
|
存储 C++
【C++】string类的使用③(非成员函数重载Non-member function overloads)
这篇文章探讨了C++中`std::string`的`replace`和`swap`函数以及非成员函数重载。`replace`提供了多种方式替换字符串中的部分内容,包括使用字符串、子串、字符、字符数组和填充字符。`swap`函数用于交换两个`string`对象的内容,成员函数版本效率更高。非成员函数重载包括`operator+`实现字符串连接,关系运算符(如`==`, `&lt;`等)用于比较字符串,以及`swap`非成员函数。此外,还介绍了`getline`函数,用于按指定分隔符从输入流中读取字符串。文章强调了非成员函数在特定情况下的作用,并给出了多个示例代码。
|
5月前
|
算法 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(中)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
51 2
|
5月前
|
算法 编译器 C语言
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题(上)
从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
34 1
|
5月前
|
Java 编译器 Linux
【C++11(二)】lambda表达式以及function包装器
【C++11(二)】lambda表达式以及function包装器
|
5月前
|
存储 安全 编译器
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
【C++ 包装器类 std::function 和 函数适配器 std::bind】 C++11 全面的std::function和std::bind的入门使用教程
83 0
|
5月前
|
自然语言处理 Java 编译器
C++中function,bind,lambda
C++中function,bind,lambda
C++中function,bind,lambda
|
5月前
|
Java API
java.util.function包下类的实现的例子
java.util.function包下类的实现的例子
35 0

热门文章

最新文章

下一篇
无影云桌面