[2017.02.23] Java8 函数式编程
以前学过Haskell,前几天又复习了其中的部分内容。
函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list、map、set,以及在这些数据结构上的专门定制化操作,来实现代码的复用。同时函数式编程有惰性求值、高阶函数、柯里化、Point-free等风格,常用的几个函数式风格的操作有 map、filter、reduce/foldr/foldl 等。 Haskell是一种纯函数式编程语言,函数没有副作用。而Python语言和Java8等则是多范式编程语言,提供了部分的函数式编程的实现。
今天阅读《Java8 函数式编程 (Java 8 Lambdas: Functional Programming for the Masses)》的前几章,编写一个简单的小程序,尽量更多地使用和测试Java8中的lambda表达式、Stream流操作、惰性求值等函数式编程风格。
PS. 最近读了不少的书籍,很多书对自己真正有用的部分真的不多。曾经傻啦吧唧地拿到一本书从头到尾没有重点地看,时间没少花费,效果却差强人意。阅读呀,有时候还是要带着目的去读,不管是不是功利性地,只要能够学得快记得牢用得好,过程都不是问题!
/**
* Created by auss on 17-2-23.
*/
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
test_lambda();
}
public static void test_lambda() {
List<Integer> ilist = Stream.of(Arrays.asList(1, 2, 3, 4, 5), Arrays.asList(6, 7, 8, 9))
.flatMap(number -> number.stream()) // 合并,惰性求值
.peek(value -> System.out.println(" " + value.toString())) // 遍历输出
.collect(Collectors.toList()); //输出位list,触发及时求值操作
Integer res = ilist.stream() //List转化为Stream对象 stream()串行流,parallelStream()并行流
.parallel() //将Stream并行化处理
.filter(value -> value % 2 != 0) //过滤奇数
.map((value) -> value * 3 + 1) //乘以3,加上1
.reduce(0, (acc, elem) -> acc + elem); // 累加求和,初始值为0,
System.out.println("Result : " + res.toString()); // 变量的自动装线与拆箱
}
}
[2017.02.23] Java8 函数式编程的更多相关文章
- Java8 函数式编程详解
Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...
- 关于Java8函数式编程你需要了解的几点
函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...
- Java8函数式编程探秘
引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...
- java8函数式编程实例
什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...
- Java8函数式编程以及Lambda表达式
第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- 漫漫人生路,学点Jakarta基础-Java8函数式编程
接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...
- Java8函数式编程的宏观总结
1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...
- 重识Java8函数式编程
前言 最近真的是太忙忙忙忙忙了,很久没有更新文章了.最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程.很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰.接 ...
随机推荐
- 系统性能指标之 vmstat
系统性能指标 top top - 19:59:04 up 219 days, 21:51, 2 users, load average: 0.06, 0.06, 0.05 Tasks: 84 tota ...
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- ArcGIS Engine 中的多线程使用[转载]
一直都想写写AE中多线程的使用,但一直苦于没有时间,终于在中秋假期闲了下来.呵呵,闲话不说了,进入正题! 大家都了解到ArcGIS中处理大数据量时速度是相当的慢,这时如果你的程序是单线 ...
- Font Awesome Text 使用方法
<!-- basic text--> <com.beardedhen.androidbootstrap.FontAwesomeText android:layout_width=&q ...
- Java Swing编程接口(30)---列表框:JList
列表框同时可以在信息呈现给用户的列表多个选项,使用JList能够建立一个列表框. package com.beyole.util; import java.awt.Container; import ...
- windows常用cmd指令
打开命令行 1.在菜单栏中搜索命令行 2.在文件管理器的Path栏输入cmd,则在当前目录打开命令行 3.Windows+R,输入cmd,回车 ping(网络诊断工具) ping是Windows.Un ...
- node.js开发笔记之EXPRESS与EJS之ejs标签v20140329
本次记录下ejs的渲染标签 node既然是javascrip的,那么很多在前端执行代码的方式都可以放在后台从而达到无缝连接! 比如 var ygxx = function(){document.get ...
- WPF 元素tag属性绑定一个属性或一个对象
<Window x:Class="CollectionBinding.CategoryDataTemp" xmlns="http://schemas. ...
- nodejs dateformat date-utils
https://www.npmjs.org/package/dateformat https://www.npmjs.org/package/date-utils 来自为知笔记(Wiz)
- c# Unity依赖注入WebService
1.IOC与DI简介 IOC全称是Inversion Of Control(控制反转),不是一种技术,只是一种思想,一个重要的面相对象编程的法则,它能知道我们如何设计出松耦合,更优良的程序.传统应用程 ...