以前学过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. 【23.24%】【codeforces 629C】Famil Door and Brackets

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  2. 【37.50%】【codeforces 732D】Exams

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. WPF:WebBrowser提示 为帮助保护你的安全,您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容

    原文:WPF:WebBrowser提示 为帮助保护你的安全,您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容 版权声明:本文为博主原创文章,未经博主允许可以随意转载 https://bl ...

  4. vc有关 directx组态,和dxsdk_extras(directshow)

      2009-11-10 0:28 此文章:自己编写 转载于<汤姆&杰瑞> DirectShow 1 -- 下载与VC配置 1 DirectX SDK9 Directshow sd ...

  5. JPA示例项(J采纳PA的hibernate实现版本号)

    (1).JPA介绍: JPA全名Java Persistence API ,Java坚持API这是Sun公司Java EE 5规范中提出的Java持久化接口. JPA吸取了眼下Java持久化技术的长处 ...

  6. windows下编译qt的mysql驱动

    windows下编译qt的mysql驱动cd %QTDIR%\src\plugins\sqldrivers\mysqlqmake –o Makefile INCLUDEPATH+="C:\M ...

  7. Windows下程序打包发布时的小技巧(使用Dependency Walker侦测不理想,改用VS自带的dumpbin则万无一失,还可查看dll导出的函数)

    Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作的博客,里 ...

  8. 优雅实现INotifyPropertyChanged接口——利用Lambda表达式

    原文:优雅实现INotifyPropertyChanged接口--利用Lambda表达式 参考文章 在14年的时候,曾经读过上面的参考文章,不过当时并没有怎么理解,慢慢地也就将这篇文章忘诸脑后了. 直 ...

  9. ASP.NET Core 配置身份验证

    以AspUser的Password为例,去掉最少1个大写字母,1个小写字母等等坑爹的要求在Startup的ConfigureServices中进行配置 services.Configure<Id ...

  10. 最简单的IdentityServer实现——Api

    1.创建项目并添加引用 创建ASP.NET Core Web API项目IdentityServer.EasyDemo.Api   1   2 引用IdentityServer4.AccessToke ...