函数式编程

java8新特性——函数式编程(stream/map)

只愿长相守 提交于 2019-12-07 20:55:05
今天看代码,发现部分字符串处理使用的是jdk8的新特性,非常简洁。从网上找了教程,方便以后编程使用。 package com.mavsplus.java8.turtorial.streams; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; /** * java.util.Stream使用例子 * * <pre> * java.util.Stream表示了某一种元素的序列,在这些元素上可以进行各种操作。Stream操作可以是中间操作,也可以是完结操作。 * 完结操作会返回一个某种类型的值,而中间操作会返回流对象本身,并且你可以通过多次调用同一个流操作方法来将操作结果串起来。 * Stream是在一个源的基础上创建出来的,例如java.util.Collection中的list或者set(map不能作为Stream的源)。 * Stream操作往往可以通过顺序或者并行两种方式来执行。 * </pre> * * public interface Stream<T> extends BaseStream<T, Stream<T>> { * <p> * 可以看到Stream是一个接口,其是1.8引入 * * <p> * Java

深入理解Scala中的函数式编程

╄→гoц情女王★ 提交于 2019-12-07 06:21:40
核心内容: 1、Scala中函数的地位:一等公民 2、Scala中的匿名函数(函数字面量) 3、Scala中的高阶函数 4、Scala中的闭包 5、Scala中的部分应用函数 6、Scala中的柯里化函数 1、Scala中函数的地位:一等公民 ①在Scala当中,函数是一等公民,像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量. ②在Scala当中,函数是一等公民,函数的创建不用依赖于类、特质或者对象,而在Java当中,函数的创建则要依赖于类、抽象类或者接口. Python中的函数: 定义一个函数就相当于在进行赋值操作,相当于定义一个变量。 只要碰到def,就将其当成一个变量赋值操作。 示例程序1: 运行结果: Spark Hadoop Spark Hadoop Spark Hadoop 示例程序2: 2、Scala中的匿名函数(函数字面量) ①Scala中的匿名函数也叫做函数字面量,既可以作为函数的参数使用,也可以将其赋值给一个变量. ②在匿名函数的定义当中,=>可理解为一个转换器,它使用右侧的算法,将左侧的输入数据转换为新的输出数据. 实例程序1: 运行结果: [ 2 4 6 8 ] [ 2 4 6 8 ] [ 2 4 6 8 ] 3、Scala中的高阶函数 ①函数的类型,其实就是输入输出值的类型. ②Scala中的高阶函数包括两种:

python 函数式编程之偏函数

偶尔善良 提交于 2019-12-06 14:59:08
python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 偏函数 Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。 在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: print int('123456') 运行结果: 123456 Process finished with exit code 0 但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换: print int('123456', base=8) print int('123456', 16) 运行结果: 42798 1193046 Process finished with exit code 0 假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去: def int2(x, base=2): return int(x, base) 这样,我们转换二进制就非常方便了: def int2(x, base=2

函数式编程

我的未来我决定 提交于 2019-12-06 03:33:45
函数式编程语言操纵代码片段就像操作数据一样容易。 虽然 Java 不是函数式语言,但 Java 8 Lambda 表达式和方法引用 (Method References) 允许你以函数式编程。 // functional/Strategize.java interface Strategy { String approach(String msg); } class Soft implements Strategy { public String approach(String msg) { return msg.toLowerCase() + "?"; } } class Unrelated { static String twice(String msg) { return msg + " " + msg; } } public class Strategize { Strategy strategy; String msg; Strategize(String msg) { strategy = new Soft(); // [1] this.msg = msg; } void communicate() { System.out.println(strategy.approach(msg)); } void changeStrategy(Strategy strategy)

scala函数式编程

…衆ロ難τιáo~ 提交于 2019-12-06 00:51:40
 结构  学会使用Scala中主要的结构控制语句  数组  学会数组的声明与使用  映射  了解Scala中的映射的基础知识  包与引用 Scala控制结构  判断(if表达式)  循环(while/do语句)  枚举(for表达式)  匹配(match表达式)  异常处理(throw/try)  输出(print/println)  输入(readLine) 判断(if表达式)  检测语句是否为真,并执行之后的语句  if(A) B ; else C (“ ;”号能省略吗?)  A可以是任意返回布尔值的语句,或是布尔值的量,真则执行B,假则执行C;  当B为空时,可写成 if(!A) C  def min(x:Int,y:Int):Int={ var a=x if(x>y) a=y return a }  if表达式能用以赋值  def min(x:Int,y:Int)= if(x>y) y else x 循环(while/do)  while语句包括状态判断与循环体,只要当前状态判断为真,就执行循环体一遍;然后 进行下一次状态判断,判断为假时终止循环。  while(A) B  do语句与while相反,先执行循环体一遍,然后进行状态判断,状态判断为真,则继续 执行循环体,否则终止循环。  do B while(A)  m -

浅谈Python中函数式编程、面向对象编程以及古怪的PythonIC

雨燕双飞 提交于 2019-12-05 15:29:46
1、函数式编程作为结构化编程的一种,正在受到越来越多的重视。那么什么事函数式编程呢? 在维基百科中给出了详细的定义,函数式编程又称泛函数编程,是一种编程规范,它将函数运算视为数学上的函数计算。简单的来说就是一步步的执行程序。 2、面向对象编程呢是具有对象概念的程序编程范例,同时也是一种程序开发的方法。简单地说呢就是抽象出一类方法为类,我们只需要执行一个指令就可以完成我们想要的目的,这是目前阶段较为合适和主流的开发模式,高效简洁,但同时这种编程思想需要大量的工作经验以及事物的流程非常清晰的高级工程师才可以胜任。 3、接下来是PythonIC,我第一次听到这个名词是在慕课网上看到的,第一感觉这是什么,都没听过呀,所以抱着对新事物的渴望就去了解了一下,发现他其实就是当一个事物发展到一定的程序而演化出来的东西,这很正常嘛,事物不可能是一成不变的,人生在日新月异的发展,事物亦是如此,额,似乎偏离轨道,接下来步入正轨,PythonIC呢它是一个框架, Pythonic 就是以清晰、可读的惯用法应用 Python 理念和数据结构。 适用于底层的惯用法,python学习的第一印象就是简单、宽松,几乎没什么语法,但是另一端呢PythonIC框架确实极其的严格,类似于Java等类语言,相比于python来说非常难学,有人认为它是Java式的,虽然很对Java程序员并不这么认为。 总之,

每个 JavaScript 工程师都应当知道的 10 个面试题

元气小坏坏 提交于 2019-12-05 09:43:42
1. 能说出来两种对于 JavaScript 工程师很重要的编程范式么? JavaScript 是一门多范式(multi-paradigm)的编程语言,它既支持命令式(imperative)/面向过程(procedural)编程,也支持面向对象编程(OOP,Object-Oriented Programming),还支持函数式编程(functional programming)。JavaScript 所支持的面向对象编程包括原型继承(prototypal inheritance)。 面试加分项 原型继承(即:原型,OLOO——链接到其它对象的对象); 函数式编程(即:闭包(closure),一类函数(first class functions),lambda 函数:箭头函数)。 面试减分项 连范式都不知道,更别提什么原型 OO(prototypal oo)或者函数式编程了。 深入了解 The Two Pillars of JavaScript Part 1:JS 两大支柱之一:原型 OO The Two Pillars of JavaScript Part 2:JS 两大支柱之二:函数式编程 2. 什么是函数式编程? 函数式编程,是将数学函数组合起来,并且避免了状态共享(shared state)及可变数据(mutable data),由此而产生的编程语言。发明于 1958 年的

Java基础-函数式编程接口篇

好久不见. 提交于 2019-12-04 23:29:23
1. 函数式接口 1.1 函数式接口介绍 ​ 函数式接口在Java中是指: 有且仅有一个抽象方法的接口 。 ​ 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。 从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。 1.2 格式 只要确保接口中有且仅有一个抽象方法即可: 修饰符 interface 接口名称 { public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容 } 1.3 @FunctionalInterface注解 与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于一个接口的定义上: @FunctionalInterface public interface MyFunctionalInterface { void myMethod(); } 一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。需要注 意的是,即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口

Python笔记4

主宰稳场 提交于 2019-12-04 17:37:30
JSON: JavaScript Object Notation, JavaScript 对象标记 JSON 本质:是一种轻量级的数据交换格式 1. 轻量级 是 和 XML作比较 2. 数据交换格式 :JSON 是一种数据交换格式, 它的载体是字符串(字符串是JSON的表现形式。) Ps. JSON 对象 和 JSON 字符串的区别 符合JSON格式的字符串叫做JSON字符串, i.e { "name":"John"} Ps. JSON VS XML , JSON 在互联网领域更受欢迎。 JSON优势:易于阅读、解析,网络传输效率高,是一种跨语言交换数据(XML也是跨语言的) 反序列化 json_str='{"name":"小气","age":18}' #JSON 字符串 json_array='[{"name":"小气","age":18},{"name":"小气","age":18}]'#JSON数组 里面 是双引号的话,外面必须是单引号 JSON格式的字符串键值必须是双引号 数字可以不加双引号 json字符串loads,转换成dict字典;jsonarray数组loads,转换成列表 JSON字符串到某种语言的解析过程叫反序列化 MongoDB是nosql数据库的代表,比较适合存储序列化后的数据 反序列化是将 JSON数据类型转化成python数据类型 关键在于

函数式编程

白昼怎懂夜的黑 提交于 2019-12-04 11:41:50
什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法。 被@FunctionalInterface注解该接口,没有该注解的接口满足约束也行。 自定义一个函数式编程接口 /** * 自定义一个函数式编程接口 * 函数式编程只有一个抽象方法,所以默认的是实现的是这个抽象方法 * @param <T> * @param <R> */ @FunctionalInterface public interface CalcFunctionInterface<T, R> { /** * 计算t1和t2 * * @param t1 * @param t2 * @return */ R calc(T t1, T t2); } 传入不同calc函数实现的对象,进行调用 相当于以前创建CalcFunctionInterface的匿名类,重写了calc方法(由于只有一个抽象方法,所以默认就是calc方法) /** * 相当于一个类实现了CalcFunction接口中的唯一一个函数calc * 然后在利用多态,调用calc函数,传入两个参数,进行计算 */ @Test public void add(){ CalcFunctionInterface<Integer, Integer> add = (t1