以前学过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 函数式编程的更多相关文章

  1. Java8 函数式编程详解

    Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...

  2. 关于Java8函数式编程你需要了解的几点

    函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...

  3. Java8函数式编程探秘

    引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...

  4. java8函数式编程实例

    什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...

  5. Java8函数式编程以及Lambda表达式

    第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...

  6. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  7. 漫漫人生路,学点Jakarta基础-Java8函数式编程

    接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...

  8. Java8函数式编程的宏观总结

    1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...

  9. 重识Java8函数式编程

    前言 最近真的是太忙忙忙忙忙了,很久没有更新文章了.最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程.很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰.接 ...

随机推荐

  1. 使用dom4j来处理xml的一些常用方法

    要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就 ...

  2. React中的state与props的再理解

    props可以看做是 property 的缩写的复数,可以翻译为属性,类似于HTML 标签的自定义属性.在大多数React教程里讲 state 和 props 主要的区别在于 props 是不可变的, ...

  3. WinFrom - 打开一个窗体关闭另一个窗体

    在写Winform程序的时候,经常会遇到“打开一个新的窗体然后关闭本窗体”之类的问题.最常见的就是登陆界面和主窗体了.而最常见的处理方法就是表单判断正确后 new MainForm().Show(); ...

  4. echarts的一些基础笔记

    图表标题 title: { x: "left", // 水平安放位置,默认为左对齐,可选为: // 'center' ¦ 'left' ¦ 'right' // ¦ {number ...

  5. yii2.0获取最后一条ID

    $r_id=Yii::$app->db->getLastInsertID();

  6. linux 下Eclipse for C/C++的不常见设置

    设置1:build project的时候,让编译器支持  三字母词. 项目文件右击--> Properties-->C/C++ Build--> Settings 如图设置: 再 C ...

  7. WinEdt && LaTex(四)—— 自定义新命令(newcommand、def)

    1. 新建命令 使用如下的命令:\newcommand{name}[num]{definition}: 该命令(newcommand)有两个参数,第一个 name 是你想要建立的命令的名称,第二个def ...

  8. WPF 获取 ListView DataTemplate 中控件值

    原文:WPF 获取 ListView DataTemplate 中控件值 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://blog.csdn.net/songqingwei19 ...

  9. Select2使用方法汇总

    引用: <script src="~/Content/plugins/select2/select2.min.js"></script> 1.简单使用 $. ...

  10. Cocos2d-x移植WP8时间CCScrollView问题

    cocos2d-x 2.2中的CCScrollView和CCTableView存在bug.导致区域裁剪错误 我是这样解决的. 在CCEGLView::setScissorInPoints里.依据不同旋 ...