首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Effective-java-读书笔记之Lambda表达式

第44条 优先使用标准的函数式接口 有了lambda之后, 模板方法(Template Method)模式就没有吸引力了, 现代的方法是提供一个接收函数对象的静态工厂或者构造函数来达到相同的效果....更一般地, 你需要写更多的以函数对象作为参数构造方法. 要谨慎选择正确的函数参数类型. java.util.function包中提供了一系列标准的函数式接口(一共43个)....六个基本的函数式接口: UnaryOperator: 一个参数, 返回类型参数相同. BinaryOperator: 两个参数, 返回类型参数相同....Predicate: 一个参数, 返回一个boolean. Function: 参数返回类型不同. Supplier: 参数, 有返回....Consumer: 有参数, 返回.

38420

Effective Java(第三版)-学习笔记

Chapter02:对象的创建和销毁 考虑使用静态工厂方法而不是构造方法创建对象 静态工厂方法的好处有: 1.静态工厂方法方法名,可避免构造方法的重载并且易读。...静态工厂方法的缺点主要有: 1.如果返回对象的类只有package-protected或private的构造方法,则工厂方法不能创建子类对象。...当有很多构造参数时,使用Builder模式 当有很多构造参数并且是可选参数的时候,使用Builder模式更加易读,并且也会比单纯的javaBean.set方法安全。...之前匿名内部类可用来作为接口或抽象类的实现传入方法,但自从Java8引入Lambda表达式,Lambda表达式更适合这种场景。此外,匿名内部类可作为静态工厂方法的实例返回。...总之,使用泛型类型的参数可尽量避免运行时的类型强转。 优先使用泛型修饰的方法 是指用泛型类型修饰方法的形式参数返回,同样可以避免方法中的类型强转。

1.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

@JsonCreator自定义反序列化函数-JSON框架Jackson精解第5篇

,给大家介绍一下 首先调用反序列化的目标类PlayerStar3的构造函数构造一个java对象 然后调用该类的成员变量的set方法,为该对象的每一个成员变量赋值。...所以默认情况下,一个Java类使用Jackson做反序列化,必须有public构造函数(java中不写也默认有),必须有成员变量的set方法。...二、@JsonCreator注解 默认情况下,Jackson的反序列化过程是上面描述的那样,使用构造函数及set方法。...,默认的使用构造函数及set方法进行反序列化的过程失效。...@JsonCreator注解加在工厂静态方法上 除了可以将@JsonCreator加在构造方法上,还可以使用静态工厂函数序列化构造java对象。

4K30

Java Lambda 表达式学习笔记

T,输出 BiConsumer - 消费者:输入 T U 输出 UnaryOperator - 单元运算:输入 T 输出 T BinaryOperator - 二元运算...(str) 是否与方法签名匹配(方法参数类型、个数、顺序 返回类型) 如果不匹配,则报编译错误 这里的目标类型是关键,通过目标类型获取方法签名,然后 Lambda 表达式做出对比。...如下面的函数为了将字符串转为数组 方法引用写法 ? Lambda 写法 ? 传统写法 ? 数组构造方法引用 语法为: Type[]::new 。...如下面的函数为了构造一个指定长度的字符串数组 方法引用写法 ? 方法引用写法 ? 传统写法 ? 静态方法引用 语法为: Type::new 。...如下面的函数同样为了将字符串转为数组 方法引用写法 ? Lambda 写法 ? 传统写法 ? 实例上实例方法引用 语法为: instanceName::methodName 。

40520

ApacheCN Java 译文集 20211012 更新

考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用 builder 模式 3. 使用私有构造方法或枚类实现 Singleton 属性 4. 使用私有构造器执行非实例化 5....使用标记接口定义类型 42. lambda 表达式优于匿名类 43. 方法引用优于 lambda 表达式 44. 优先使用标准的函数式接口 45. 明智审慎地使用 Stream 46....分析设计 1.13 Java还是C++ 第2章 一切都是对象 2.1 用引用操纵对象 2.2 所有对象都必须创建 2.3 绝对不要清除对象 2.4 新建数据类型:类 2.5 方法参数返回 2.6...数组、集合和数据结构 六、Java I/O 路径、文件、缓冲区、扫描格式化 七、Java 反射类、接口、构造器、方法字段 八、函数式编程-基础设计模式 九、函数式编程——深入研究 十、并发-线程池...集合 十四、管理集合和数组 十五、管理对象、字符串、时间随机数 十六、数据库编程 十七、Lambda 表达式与函数式编程 十八、流管道 十六、反应式系统 Java7 并发秘籍 零、序言 一、线程管理

2.5K10

Java基础

多态 多态可以分为两种:设计时多态运行时多态。 设计时多态:即重载,是指Java允许方法名相同而参数不同(返回可以相同也可以不相同)。...运行时多态:即重写,是指Java运行根据调用该方法的类型决定调用哪个方法。要求方法名、参数返回必须相同。 多态目的:增加代码的灵活度。 3....反射:使用Class类的newInstance方法可以调用参的构造器来创建对象,如果是有参构造器,则需要使用Class的forName方法Constructor来进行对象的创建。...Lamda表达式 定义:Lambda 表达式(lambda expression)是一个匿名函数Lambda 规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法 思想:函数式编程思想...Java 8系列之Stream Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找

1.3K10

Java-lambda表达式入门看这一篇就够了

文章目录 概述 语法 函数式接口 方法引用 构造器引用 变量作用域 处理lambda表达式 概述 Lambda表达式,也可称为闭包,是JDK8的新特性。...Lambda 允许把函数作为一个方法参数函数作为参数传递进方法中),可以使代码变的更加简洁紧凑。Lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。...(插播爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/ 构造器引用 构造器引用与方法引用很类似,只不过方法名为new,例如Person::new是Person...比如有一个字符串列表,可以把他转换为一个Person对象数组,为此要在各个字符串上调用构造器。...参数类型 返回类型 抽象方法名 描述 其他方法 Runnable void run 作为参数或返回的动作执行 Supplier T get 提供一个T类型的 Consumer<

3.9K62

python怎么调用模块_切换模块的功能特点

YAML文档的字节字符串、Unicode字符串、打开的二进制文件对象或者打开的文本文件对象作为参数。...不过有一点需要注意,在反序列化这样的Python对象时,只能使用 safe_load safe_load_all 方法。...该函数接受一个Python的列表或者生成器对象作为第一个参数,表示要序列化的多个Python对象。...下面就来详细介绍下每个参数的含义用法。 stream 指定由于输出YAML流的打开的文件对象。默认为 None,表示作为函数的返回返回。...名称模块 要表示静态的Python对象,如函数类,可以使用复杂的标签Python !!python/name 。下面的例子演示了如何表示yaml模块中的dump方法: !!

2.2K30

python核心知识汇总(精编版)

上下文管理器是支持两个方法的对象:__enter__ __exit__。 JSON序列化 JSON是一种轻量级的数据交换格式,它的设计意图是把所有事情都用设计的字符串来表示。...json.loads() 函数,接受一个合法字符串,然后将其反序列化为 Python 的基本数据类型。...加了*的参数会以元组tuple的形式导入,而**的参数以字典形式导入。 匿名函数 python使用lambda来创建匿名函数。...构造函数:用def __init__(self, args...)声明,第一个参数self代表当前对象的引用,其他参数是在对象化时需要传入的属性构造函数在一个对象生成时(即实例化时)会被自动调用。...类函数:类函数的第一个参数一般为cls,表示必须传一个类进来;最常用的功能是实现不同的init构造函数;需要装饰器@classmethod来声明。

1.4K10

MongoDB学习(翻译5)

使用lambda表达式,而不是仅仅使用一个字符串参数的属性名称的优点是IntelliSense编译时检查,确保你正确的拼写属性名称。 另外,也可以使用自动映射,然后覆写一些结果。...BsonClassMap.IsClassMapRegistered(typeof(MyClass))) { // 为MyClass注册类映射 } Creator Maps 默认情况下,类必定包括一个参的构造函数来用于类的实例化...,然后配置一个具有映射属性相关的参数构造函数是可以的,有两种方法可以实现: 使用一个表达式,你可以按照下面方式通过驱动使用一个creator map public class Person {...=> { cm.AutoMap(); cm.MapCreator(p => new Person(p.FirstName, p.LastName)); }); 解析表达式树使构造函数第一个参数...FirstName 相关,使构造函数第二个参数LastName 属性相关。

45220

Python 3 入门,看这篇就够了

字符串(string) 单引号双引号使用完全相同 使用三引号('''或""")可以指定一个多行字符串 转义符(斜杠)可以用来转义,使用r可以让斜杠不发生转义,如r"this is a line with...Python 3 不会以任意隐式的方式混用 str bytes,你不能拼接字符串字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。...dict.popitem() 随机返回并删除字典中的一对键(一般删除末尾对) 字典推导式 构造函数 dict() 直接从键值对元组列表中构建字典。...return 可以返回多个,此时返回的数据未元组类型。 定义参数时,带默认参数必须在默认值参数的后面。 def 函数名(参数列表): 函数体 2....lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

1.7K60

Java--lambda(λ)表达式

构造器引用: 构造器引用方法引用很类似,只不过方法名为new。例如,Person::new是Person构造器的一个引用。哪一个构造器取决于上下文。...来看一下lambda表达式的组成: 参数; 一个代码块; 自由变量的,这是指非参数而且不在代码中定义的变量。 这里text就是自由变量,是lambda表达式的数据结构中必须保存的。...函数式接口 参数类型 返回类型 抽象方法名 描述 Runnable void run 作为参数或返回的动作执行 Supplier T get 提供一个T类型的 Consumer...T void accept 处理一个T类型的 BiConsumer T,U void accept 处理TU类型的 Function T R apply 有一个T类型参数函数...T apply 类型T上的二元操作符 Predicate T boolean test 布尔函数 BiPredicate T,U boolean test 有两个参数的布尔函数

1K60

重温 CC++ 笔记

lambda 表达式不是函数是变量,但可以像函数一样被调用 字符串的拷贝、修改代价比较高,应当尽量用 const string& 的方式来引用字符串 原始指针可以拷贝,符合语义,可以放进容器...DRY KISS 不涉及面向对象,更多地偏向代码编写规范 笔记 类内部为什么不能用 auto 捕获的 lambda 才能转成函数指针? g++ 参数都什么意思?...为了减少创建对象成本,C++ 11 引入了右 (Rvalue) 转移(move): 转移构造函数 转移赋值函数 对于比较重要的构造、析构函数,可以使用 = default,让编译器生成默认实现...也可以明确指定变量名捕获方式 参数使用 auto 声明,可以让 lambda 表达式处理不同类型的参数: //5.泛型的 lambda void test_lambda_3() { //参数使用 auto...16 节 网络通信 使用 libcurl 进行网络请求的四个步骤:初始化句柄、设置参数、发送请求、清理句柄 (捕获的 lambda 可以转成函数指针) cpr:对 libcurl 的封装 ZMQ:无阻塞传递海量数据

1.2K30

Java学习的知识笔记

判断string是否是空字符串可以用isBlank()进行判断 对于超大的整数加减使用对应的函数进行操作,比如加,使用add函数 参考bignum.java 因为math类的构造方法是private...子类在继承的时候会继承父类参的构造函数并且在子类生成实例的时候会调用一下父类的构造函数再去调用子类的对应参数构造方法!!!...,它的形式参数全部传递给该方法作为参数 lambda表达式在被类的实例方法替代的时候,一个参数作为调用者,后面的参数全部传递给该方法作为参数 lambda表达式在被构造器替代的时候,它的形式参数全部传递给构造器作为参数...函数应用于结果,Funtino接口通常用于对参数进行处理,转换(处理逻辑由lambda表达式实现)返回一个新的,function的andthen是对同一数据依次进行操作,即第二次的参数数据是第一次的结果...,返回该对象所属类对应的class对象 使用class类的静态方法forName(String className),该方法需要传入字符串参数,该字符串参数是某个类的全路径也就是完整把包名的路径

7110

Python 3基础语法知识点都在这里了,如果还不能入门就不能怪我了

字符串(strng) 单引号双引号使用完全相同 使用三引号('''或""")可以指定一个多行字符串 转义符(斜杠)可以用来转义,使用r可以让斜杠不发生转义,如r"this is a line with...Python 3 不会以任意隐式的方式混用 str bytes,你不能拼接字符串字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。...dict.popitem() 随机返回并删除字典中的一对键(一般删除末尾对) 字典推导式 构造函数 dict() 直接从键值对元组列表中构建字典。...return 可以返回多个,此时返回的数据未元组类型。 定义参数时,带默认参数必须在默认值参数的后面。...仅仅能在 lambda 表达式中封装有限的逻辑进去。 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

1.8K30

一文入门Python 3

字符串(string) 单引号双引号使用完全相同 使用三引号('''或""")可以指定一个多行字符串 转义符(斜杠\)可以用来转义,使用r可以让斜杠不发生转义,如r"this is a line...Python 3 不会以任意隐式的方式混用 str bytes,你不能拼接字符串字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。...dict.popitem() 随机返回并删除字典中的一对键(一般删除末尾对) 字典推导式 构造函数 dict() 直接从键值对元组列表中构建字典。...return 可以返回多个,此时返回的数据未元组类型。 定义参数时,带默认参数必须在默认值参数的后面。...仅仅能在 lambda 表达式中封装有限的逻辑进去。 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

1.2K20

Python 3 入门 ,看这篇就够了 。

数学常量 字符串(string) 单引号双引号使用完全相同 使用三引号('''或""")可以指定一个多行字符串 转义符(斜杠\)可以用来转义,使用r可以让斜杠不发生转义,如r"this is a...Python 3 不会以任意隐式的方式混用 str bytes,你不能拼接字符串字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。...dict.popitem() 随机返回并删除字典中的一对键(一般删除末尾对) 字典推导式 构造函数 dict() 直接从键值对元组列表中构建字典。...return 可以返回多个,此时返回的数据未元组类型。 定义参数时,带默认参数必须在默认值参数的后面。...仅仅能在 lambda 表达式中封装有限的逻辑进去。 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

1.1K20

Effective Java通俗理解(上)

第1条:考虑用静态工厂方法代替构造器   通常情况下我们会利用类的构造器对其进行实例化,这似乎毫无疑问。但“静态工厂方法”也需要引起我们的高度注意。   什么是“静态工厂方法”?...这种解决方案属建造者模式的一种形式,其核心就是不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静态工厂),得到一个builder对象,再调用类似setter的方法设置相关可选参数。...比较的两个实例是否是引用相等的,换句话说,在不考虑“相等”的情况下,每个实例都是独一二的,每个实例都只与它自身相等。...super T> c)方法,第一个参数传递数组,根据传入第二个自定义的比较类中的比较方法进行排序。如果能传入函数指针、Lambda表达式等,那就自然不用传递一个类。   ...函数式接口实际上就是指只包含一个抽象方法的接口,比如Runnable接口只包含run抽象方法。而lambda表达式本身实际上则是对抽象方法的实现。

1.3K70
领券