1. 函数式编程

Java有2类方法:

  • 实例方法:通过实例调用
  • 静态方法:通过类名调用
  • Java的方法相当于过程式语言的函数

函数式编程(Functional Programing):

  • 把函数作为基本运算单元
  • 函数可以作为变量,传递给另一个函数
  • 函数可以接收函数
  • 函数可以返回函数

历史研究函数式编程的理论是Lambda演算,所以把支持函数式编程的风格成为Lambda表达式

2. Java的单方法接口

在Java中,有许多接口只定义了1个方法:

  • Comparator
  • Runnable
  • Callable
  • 只定义了单个抽象方法的接口,可以被标注为@FunctionalInterface

3. Java的Lambda表达式:

  • JDK >= 1.8
  • 简化语法 不再需要匿名类的定义
  • 类型自动推断(编译器自动完成) 不需要在方法中声明参数类型

    * 如Comparator接口传入的参数是2个String类型,可以省略;返回1个int类型,也可以省略。

    使用匿名类方式实现一个单方法接口的时候,代码比较繁琐,需要覆写这个方法,而使用Lambda表达式的时候,我们可以大大的简化语法。()表示参数,->{}表示方法过程

    以Comparator为例:

4. 代码示例

package csj2019;

import java.util.Arrays;
import java.util.Comparator; public class LambdaSimple {
public static void main(String[] args) throws Exception{
String[] words = "Improving code with Lambda expression In Java".split(" ");
/** Arrays.sort(words, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.toLowerCase().compareTo(o2.toLowerCase());
}
});
System.out.println(Arrays.toString(words)); */
Arrays.sort(words,(s1,s2)->{
return s1.toLowerCase().compareTo(s2.toLowerCase());
});
System.out.println(Arrays.toString(words));
}
}

5. 总结:

  • Java8引入了Lambda语法,用以简化单抽象方法接口的实现
  • Lambda语法实现了类型自动推断
  • 单抽象方法接口被成为函数式接口

廖雪峰Java16函数式编程-1Lambda表达式-1Lambda基础的更多相关文章

  1. 廖雪峰Java16函数式编程-1Lambda表达式-3方法引用

    Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法 ...

  2. 廖雪峰Java16函数式编程-2Stream-7其他操作

    1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? ...

  3. 廖雪峰Java16函数式编程-2Stream-6reduce

    1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); // ...

  4. 廖雪峰Java16函数式编程-2Stream-5filter

    1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过 ...

  5. 廖雪峰Java16函数式编程-2Stream-4map

    1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算 ...

  6. 廖雪峰Java16函数式编程-2Stream-2创建Stream

    1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream. ...

  7. 廖雪峰Java16函数式编程-2Stream-1Stream简介

    1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream ...

  8. [python学习篇][廖雪峰][2]函数式编程

    函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就 ...

  9. 函数式编程/lambda表达式入门

    函数式编程/lambda表达式入门 本篇主要讲解 lambda表达式的入门,涉及为什么使用函数式编程,以及jdk8提供的函数式接口 和 接口的默认方法 等等 1.什么是命令式编程 命令式编程就是我们去 ...

随机推荐

  1. Unity3D中画拉选框(绘制多选框)

    问题分析: 需要根据鼠标事件,摁下鼠标开始绘制选择框,抬起鼠标结束绘制. 实现思路: 该需求是屏幕画线,Unity内置了GL类  封装了OpenGL,可以通过GL类来实现一些简单的画图操作,这里也是使 ...

  2. 笔记-ubuntu中/home下中文目录改英文

    安装ubuntu后,如果选择的语言是中文,那/home下的文件夹会默认中文,在使用命令行的时候很不方便,此文记录切换成英文的方式,以便日后查看. 将目录重命名为英文 可以使用图形化界面,直接重命名 可 ...

  3. Number 的扩展

    Number.parseInt(), Number.parseFloat() ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变. Numb ...

  4. webpack初始化

    1. 安装node js 2. 安装npm 3. 在桌面新建一个文件夹 4.利用cmd 进入文件夹 5.在cmd中创建一个新文件夹并且进入 6.npm init -y  生成page.json 7. ...

  5. Spring - @ManagedResource, @ManagedOperation, @ManagedAttribute

    总结 通过annotation (@ManagedResource, @ManagedOperation, @ManagedAttribute)注解注册MBean到JMX实现监控java运行状态 参考 ...

  6. R语言 运算符

    R语言运算符 运算符是一个符号,通知编译器执行特定的数学或逻辑操作. R语言具有丰富的内置运算符,并提供以下类型的运算符. 运算符的类型 R语言中拥有如下几种运算符类型: 算术运算符 关系运算符 逻辑 ...

  7. Quick BI功能篇之(一):20分钟入门

    前言: 最近小编帮助隔壁团队一个小姐姐解决了个大难题:给老板汇报业绩分析,频次提高.效率提升,还得保证团队中的小伙伴们都得有点大数据时代的基本数据能力.小编觉得这么好的经验可以分享给更多志同道合的朋友 ...

  8. NX二次开发-UFUN输出UF函数使用错误UF_get_fail_message

    #include <uf.h> #include <uf_ui.h> #include <uf_modl.h> UF_initialize(); UF_FEATUR ...

  9. NX二次开发-UF_MODL_ask_distance_tolerance获取建模的长度公差

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize() ...

  10. UIWindow & UIWindowLevel笔记

    一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...