流与集合    众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计算从伦敦来的艺术家的人数 请注意这个问题例子在本篇博客中会经常提到,希望你能记住这个简单的例子 这个问题看起来相当的简单,那么使用for循环进行计算 int count = 0; for(Artist artist: allArtists){ if(artisst.isFrom("Lodon&quo…
摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的. 在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT.CMU以及Chicago,他们初次涉及的语言是Haskell.Scheme及Lisp.他们认为函数式编程是一种自然的.直观的.美丽的且高效的编程样式.但奇怪的是,我和我…
为什么要有练习题?    所谓学而不思则罔,思而不学则殆,在系列第一篇就表明我认为写博客,既是分享,也是自己的巩固,我深信"纸上得来终觉浅,绝知此事要躬行"的道理,因此之后的几篇博客都会在知识点后面附上几道练习题,不会单独开一篇来说练习题.    大部分题练习题来自于Richard Warburton的<Java8 函数式编程>,练习题的难度不会很难,大部分都十分的基础(可能偶尔会有一两道进阶题),并且我在后面也会附上可供参考的思路与代码,但是我认为想要学习的人(包括我)应…
什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterface注解该接口,没有该注解的接口满足约束也行. 自定义一个函数式编程接口 /** * 自定义一个函数式编程接口 * 函数式编程只有一个抽象方法,所以默认的是实现的是这个抽象方法 * @param <T> * @param <R> */ @FunctionalInterface publ…
package com.atguigu.java8; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; import org.junit.Test; /* * 一.Lambda 表达式的基础语法:Java8中引入了一个新的…
函数式编程优势 "函数第一位",即函数可以出现在任何地方. 可以把函数作为参数传递给另一个函数,还可以将函数作为返回值. 让代码的逻辑更清晰更优雅. 减少了可变量(Immutable Variable)的声明,程序更为安全. 支持惰性计算. Lambda语法三部分 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数 一个箭头符号:-> 方法体,可以是表达式和代码块,方法体函数式接口里面方法的实现,如果是代码块,则必须用{}来包裹起来,且需要一个return 返回值,但…
本文的主要内容来自<Functional Programming in Swift>这本书,有点所谓的观后总结 在本书的Introduction章中: we will try to focus on some of the qualities that we believe well-designed functional programs in Swift should exhibit: 1. Modulatity[模块化] 2. A Careful Treatment of Mutable…
这节开始讲的例子都使用简单的TS来写,尽量做到和es6差别不大,正文如下 我们在编程中必然需要用到一些变量存储数据,供今后其他地方调用.而函数式编程有一个要领就是最好不要依赖外部变量(当然允许通过参数传递咯),如何解决这个矛盾的问题呢?将函数柯里化`Curry`就可以了,这种技巧可以让函数记住一些历史数据,也就是缓存,怎么做呢? 说柯里化之前必须先说一下闭包,因为这是实现柯里化的方法. 闭包 const fun = () => { let a = 0; return () => { a +=…
首先要明白为什么要用到返回值,返回值的作用就是为了分情况来处理下面的程序(个人见解总结) 1.函数返回值 def test1(): pass def test2(): return 0 def test3(): return 0,10,'hello',['a','c'],{'nihao':'hah'} t1 = test1() t2 = test2() t3 = test3() print(t1) print(t2) print(t3) 返回值总结: (1)返回值个数为0,返回none (2)返…
  本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看一下百度百科中关于函数的说明 函数的定义: 给定一个数集A,假设其中的元素为x. 现对A中的元素x施加对应法则f,记作f(x),得到另一数集B.假设B中的元素为y. 则y与x之间的等量关系可以用y=f(x)表示. 我们把这个关系式就叫函数关系式,简称函数. 函数概念含有三个要素:定义域A.值…