在 Java 8 中,添加了函数式接口, lambda 表达式和方法引用,以便更容易地创建函数对象。下面是一段代码片段,按照字符串长度顺序对列表进行排序,使用匿名类创建排序的比较方法
(强制排序顺序):

// Anonymous class instance as a function object - obsolete!
Collections.sort(words, new Comparator<String>() {public int compare(String s1, String s2) {return Integer.compare(s1.length(), s2.length());}
});

匿名类的冗长,使得 Java 中的函数式编程成为一种吸引人的前景。

// Lambda expression as function object (replaces anonymous class)
Collections.sort(words,(s1, s2) -> Integer.compare(s1.length(), s2.length()));

使用比较器构造方法代替 lambda,则代码中的比较器可以变得更加简洁(条目 14,43):

Collections.sort(words, comparingInt(String::length));

通过利用添加到 Java 8 中的 List 接口的 sort 方法,可以使片段变得更简短:

words.sort(comparingInt(String::length));

与方法和类不同,lambda 没有名称和文档; 如果计算不是自解释的,或者超过几行,则不要将其放入 lambda表达式中。 一行代码对于 lambda 说是理想的,三行代码是合理的最大值。 如果违反这一规定,可能会严重损害程序的可读性。

Effective Java~42. Lambda 优于匿名类相关推荐

  1. Java 8:将匿名类转换为Lambda表达式

    将匿名类(实现一种方法)重构为lambda表达式,可使您的代码更简洁明了. 例如,这是Runnable及其lambda等效项的匿名类: // using an anonymous class Runn ...

  2. Effective Java读书笔记---四、类和接口

    四.对于所有对象都通用的方法 15.使类和成员的可访问性最小化 区分一个组件设计得好不好,唯一重要的因素在于,它对于外部的其他组件而言,是否隐藏了其 内部数据和其他实现细节 . 信息隐藏 -----& ...

  3. java的内部类和匿名类剖析

    Java 1.1通过对Java语言规范进行修改,显着简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.本文介绍内部类和匿名类在Java代码 ...

  4. Java高级语法笔记-匿名类(Anonymous Class)

    匿名类(Anonymous Class) 匿名内部类,简称匿名类:是内部类的一种化简写法. 基本写法如下: BaseType obj=new BaseType(){ //类的定义 } Java项目中匿 ...

  5. Java学习笔记:匿名类

    匿名类就是一个子类,由于无名可用,所以不能用匿名类声明对象,却可以直接使用匿名类创建对象. Output.java package NotNameClass; abstract class Outpu ...

  6. Java内部抽象类的匿名类初始化

    说在前面的话,以前写过一次这个变态代码,后来重构,把那个new的语法简化了,最近又要整,差点都想不起来了,留个文档把 1.下面这个案例更变态,抽象类还有一个个泛型类:首先内部抽象类的定义: /* * ...

  7. Effective Java之注解优于命名模式(三十五)

    Java 1.5之前,一般使用命名模式表明有些程序元素需要通过某种工具或者框架进行特殊处理.例如,JUnit测试框架原本要求用户一定要用test作为测试方法名称的开头. 命名模式的缺点: 文字拼写错误 ...

  8. 一文简单理解《Effective Java》建议

    考虑用静态工厂方法替代构造方法 传统的获取一个对象实例,通常是通过构造方法,new一个对象:不同数量的入参,会有不同的构造方法: 例如,统一的返回结果类,传统方式(伪代码)如下: //成功 retur ...

  9. java中的匿名类方法覆盖_Java技巧:用匿名类来实现简化程序调试

    Java技巧:用匿名类来实现简化程序调试 在Java中,匿名类(Anonymous inner classes)多用来处理事件(event handle).但其实,它们对于debug也很有帮助.本文将 ...

最新文章

  1. 菜单Menu(AS开发实战第四章学习笔记)
  2. python datasets_python基础之sklearn.datasets
  3. 【Tensorflow】io 操作
  4. 去掉烦人的“正在配置Windows”
  5. rational rose 启动选择_Rational Rose打开问题
  6. springBoot过滤器去除请求参数前后空格
  7. SQL Server 不允许保存更改。您所做的更改要求删除并重新创建一下表。您对无法重新创建的表进行了更改或启用了“阻止保存要求重新创建表的更改”选项
  8. 4x4矩阵键盘c语言程序,C语言矩阵键盘程序
  9. 边缘计算是什么?边缘计算系统的组成及概念
  10. 使用Layer弹窗时遇到Layer.Close()后dom元素延迟性销毁的问题 @Gyb
  11. dedecms友情链接字数修改
  12. 普通二本,学这些东西,也能进大厂
  13. Java::设计模式
  14. python scrapy 爬取妹子图的照片
  15. 程序员工作四五年后,就算大龄了吗?
  16. 计算机信息技术的具体应用案例,信息技术应用案例学习心得体会.doc
  17. selenium详细介绍
  18. linux内核中的设计模式
  19. 从 C++ 定义 QML 类型
  20. 磁盘体系结构和磁盘阵列技术(RAIDLVM)及分区实践

热门文章

  1. RestQL:现代化的 API 开发方式
  2. 消息中间件系列(八):Kafka、RocketMQ、RabbitMQ等的优劣势比较
  3. 阿里P8架构师谈:开源搜索引擎Lucene、Solr、Sphinx等优劣势比较
  4. 论文浅尝 | 基于图卷积网络的跨语言图谱实体对齐
  5. 论文浅尝 | XQA:一个跨语言开放域问答数据集
  6. 论文浅尝 | 多内容实体和关系联合抽取的对抗训练
  7. 观点 | 抛开炒作看知识图谱,为什么现在才爆发?
  8. 文本数据增强+NER
  9. 深度好文:2018 年 NLP 应用和商业化调查报告
  10. 简明扼要的反射入门教程