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. Java支持的数据类型有哪些?什么是拆装箱?

    Java中有八种基本数据类型以及引用类型 基本数据类型: byte(1字节),short(2字节),int(4字节),long(8字节),char(2字节),boolean(不确定,取值是true/f ...

  2. 框架集 frameset

    框架集和内联框架的作用类似,都用于在一个页面中引入其他的外部的页面 框架集可以同时引入多个页面,而内联框架引入一个, 在h5标准中,推荐使用框架集,而不使用内联框架 使用 frameset 来创建一个 ...

  3. 笔记-Linux包管理命令

    一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...

  4. 1 新增硬盘挂载home文件夹。 2 修理扇区

    一 挂载新硬盘 主机磁盘容量不够大时,想新增一颗新磁盘的时候.并将磁盘全部分割成单一分割槽,且将该分割槽挂载到/home目录,你该怎么做呢? 1  安装硬盘. 2  磁盘分区. 3 格式化磁盘 4 将 ...

  5. Echart中X轴数据过多时横向拉动展示

    chart.setOption( { tooltip: { trigger: 'axis' }, toolbox: { feature: { saveAsImage: {} } }, grid: { ...

  6. ES6 简化对象写法

    简化的对象写法 * 省略同名的属性值 * 省略方法的function <!DOCTYPE html> <html lang="en"> <head&g ...

  7. DOM——属性操作

    属性操作 非表单元素的属性 href.title.id.src.className  var link = document.getElementById('link'); console.log(l ...

  8. 2018-2019-2-20175323 java实验四 Android程序设计

    (一)安装及配置Andriod Studio,执行HelloWorld 我选择的安装网址下载了3.2.0版本的Andriod Studio 此处应该选择cancel 报错 点击所给链接,安装相应SDK ...

  9. curl命令,curl实现post,curl监控网页shell脚本,curl多进程实现并控制进程数,

    cURL > Docs > Tutorial:  http://curl.haxx.se/docs/httpscripting.html 下载单个文件,默认将输出打印到标准输出中(STDO ...

  10. Java--会移动、反弹的球

    package firstpack; import java.awt.*; public class MyStar { public static void main(String[] args) { ...