jdk8 函数式编程概念
yls
2019/11/7
函数式接口
- 如果一个接口只有一个抽象方法,那么该接口就是函数式接口
- 如果我们在某接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求改接口
- 如果一个接口只有一个抽象方法,但并没有给该接口声明FunctionalInterface注解,那么编译器依然会将该接口看作是函数式接口,
也就是说,FunctionalInterface注解只有检验该接口是否为函数式接口的作用,并没有决定性作用
lambda表达式
- 依赖于函数式接口
- 在java中,lambda表达式是对象
- 与面向对象的不同
- 面向对象提前定义好行为,lambda在使用时再定义行为
public class Test3 {
public static void main(String[] args) { //lambda表达式是对象,在使用时定义行为,增加使用者的灵活性
Function<Integer, Integer> f = v -> v * v;
System.out.println(Test3.compute(3, f)); System.out.println(Test3.method1(4));
} public static int compute(int a, Function<Integer, Integer> function) {
return function.apply(a);
} /**
* 传统写法:提前定义好行为
*
* @param a
* @return
*/
public static int method1(int a) {
return a * a;
}
}
- 面向对象提前定义好行为,lambda在使用时再定义行为
stream(不会改变底部数据)
- 源
- 一个或多个中间操作
- 终止操作(只有发生终止操作时,前面的中间操作才会执行)
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
//对list集合中的数平方再求和
//方法一
System.out.println(list.parallelStream().map(i -> i * i).reduce(0, Integer::sum));
//方法二
System.out.println(list.stream().map(i -> i * i).reduce(0, (a, b) -> a + b)); //通过stream去重
Stream<Integer> stream=Stream.of(1,1,2,3,4);
stream.distinct().forEach(System.out::println);
}
jdk8 函数式编程概念的更多相关文章
- JS函数式编程 - 概念
最近在看Typescript,顺便看了一些函数式编程,然后半个国庆假期就没有了.做个笔记,分几个部分写吧. 最开始接触函数式编程的时候,第一个接触的概念就是高阶函数,和柯里化.咋一看,这不就是长期用来 ...
- java1.8函数式编程概念
有关函数式编程 ·1 函数作为一等公民 特点:将函数作为参数传递给另外一个函数:函数可以作为另外一个函数的返回值 ·2 无副作用 函数的副作用指的是函数在调用过程中,除了给出了返回值外,还修改了函数外 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- 函数式编程/lambda表达式入门
函数式编程/lambda表达式入门 本篇主要讲解 lambda表达式的入门,涉及为什么使用函数式编程,以及jdk8提供的函数式接口 和 接口的默认方法 等等 1.什么是命令式编程 命令式编程就是我们去 ...
- python学习第十一天 -- 函数式编程
在介绍函数式编程之前,先介绍几个概念性的东西. 什么是函数式编程? 函数式编程的特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,没有副作用,测试简单; 3.支持高阶函数,代码简洁. ...
- 翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 引言&前言
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.brucec ...
- 翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...
- 全本 | iKcamp翻译 | 《JavaScript 轻量级函数式编程》|《你不知道的JS》姊妹篇
原文地址:Functional-Light-JS 原文作者:Kyle Simpson - <You-Dont-Know-JS>作者 译者团队(排名不分先后):阿希.blueken.bruc ...
- Python day 6(3) Python 函数式编程1
一:函数式编程概念 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的 ...
随机推荐
- selenium3与Python3实战 web自动化测试框架 ☝☝☝
selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...
- Kali升级2018&&2019
0X01修改更新源 vim /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-f ...
- [POJ3107] Godfather - 暴力枚举(树的重心)
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8728 Accepted: 3064 Descrip ...
- java控制执行流程
控制执行流程 欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html java当中涉及到的关键字包括if-else.whil ...
- amoeba-mysql
配置完成后无法连接 Could not create a validated object, cause: ValidateObject failed 查看logs/下面的 messageHandle ...
- eclipse 中配置maven环境
选择 菜单栏 window -preferences-maven- installations 点击add 添加自己的maven 库 配置 setting 第一个为全局配置 第二个为用户配置可以覆盖全 ...
- redis之Scan
scan 相比keys 具备有以下特点:1.复杂度虽然也是 O(n),但是它是通过游标分步进行的,不会阻塞线程;2.提供 limit 参数,可以控制每次返回结果的最大条数,limit 只是一个 hin ...
- SpringCloud之Feign负载均衡(四)
整合Feign pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <arti ...
- Oracle ADG环境搭建
部署 环境介绍 1,软件安装前基础部署 (两台做同样操作) 1.1,关闭selinux和防火墙 因为centos7里面没有/etc/sysconfig/iptables这个配置文件所以我们首先用yum ...
- Swagger解决你手写API接口文档的痛
首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛 苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...