Lambda
文章平均质量分 88
dm_vincent
这个作者很懒,什么都没留下…
展开
-
Effective JavaScript Item 50 优先使用遍历方法而非循环
优先使用遍历方法而非循环在使用循环的时候,很容易违反DRY(Don't Repeat Yourself)原则。这是因为我们通常会选择复制粘贴的方法来避免手写一段段的循环语句。但是这样做回让代码中出现大量重复代码,开发人员也在没有意义地"重复造轮子"。更重要的是,在复制粘贴的时候很容易忽视循环中的那些细节,比如起始索引值,终止判断条件等。比如以下的for循环就存在这个问题,假设n是集原创 2014-11-12 10:06:18 · 3639 阅读 · 0 评论 -
[Java 8 & Spring JDBC] 使用Spring JDBC和Lambda表达式简化DAO
使用Spring JDBC和Lambda表达式简化DAO如果你需要向数据库中插入一条Item记录,那么会有类似下面的代码:Item对应的实体类型为:public class Item { public int name; public BigDecimal price;}public void create(Item item) throws IOExcept原创 2015-07-09 10:48:27 · 7303 阅读 · 3 评论 -
[Java 8] (11) 使用Lambda的原则
要想更好的使用函数式编程,仅仅熟悉其语法结构是远远不够的。必须从思想和设计层面,去考虑它,去接纳它。这种编程范式和大多数开发人员所熟知的面向对象编程范式是不同的。下面我们从以下几个方面来回顾一下使用函数式编程的要点:多用声明式,少用命令式要想更好的使用函数式编程,首先必须要提升代码的抽象程度。之所以使用函数式编程在完成同样任务时需要的代码量比命令式要少,很大程度上就是源于函原创 2014-11-07 10:16:39 · 5832 阅读 · 1 评论 -
[Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern)
使用备忘录模式(Memoization Pattern)提高性能这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。在很多算法中,典型的比如分治法,动态规划(Dynamic Programming)等算法中,这个模式运用的十分原创 2014-10-30 09:58:15 · 7891 阅读 · 2 评论 -
[Java 8] (10) 使用Lambda完成函数组合,Map-Reduce以及并行化
Java 8中同时存在面向对象编程(OOP)和函数式编程(FP, Functional Programming)这两种编程范式。实际上,这两种范式并不矛盾,只是着重点不同。在OOP中,着重于通过丰富的类型系统对需要解决的问题进行建模;而FP中则着重于通过高阶函数和Lambda表达式来完成计算。所以我们完全可以将这两者融合在一起,对问题提出更加优雅的解决方案。在这篇文章中,会介绍如何通过函数原创 2014-11-06 10:09:44 · 36717 阅读 · 3 评论 -
[Java 8] (4) 列举目录下的所有文件和监视文件变化
列举目录中的所有文件首先给出代码:Files.list(Paths.get(".")).forEach(System.out::println);Files.list方法得到的是一个Stream类型的对象,它代表了目标路径下所有的文件。如果只想获取目标路径下的所有目录文件:Files.list(Paths.get(".")) .filter(Files原创 2014-10-24 10:18:54 · 14686 阅读 · 1 评论 -
[Java 8] (3) 字符串遍历和Comparator接口
遍历一个字符串在Java 8中,CharSequence接口新添加了一个方法叫做chars(),方法的签名是这个样子的:public default IntStream chars()default关键字修饰的接口方法是Java 8中新添加的特性,目的是向接口中添加已经实现的方法。chars()方法返回了一个IntStream类型,所以chars()实际上是为所有实现原创 2014-10-23 09:16:23 · 13004 阅读 · 2 评论 -
[Java 8] (7) 利用Stream类型的"懒"操作
利用懒操作代码中的很多操作都是Eager的,比如在发生方法调用的时候,参数会立即被求值。总体而言,使用Eager方式让编码本身更加简单,然而使用Lazy的方式通常而言,即意味着更好的效率。本篇文章就是为了展示Java 8中新特性是如何让我们能够更方便的写出Lazy方式代码。延迟初始化对于会消耗较多资源的对象,使用延迟初始化是比较好的选择。这不仅能够节省一些资源,同时原创 2014-10-27 10:14:10 · 17099 阅读 · 0 评论 -
[Java 8] (6) Lambda与资源管理
资源处理Java本身自带了垃圾回收(Garbage Collection)功能,但是只有垃圾回收的目标是内部资源(Internal Resource),典型的比如堆上分配的内存区域等。对于外部资源(External Resource),如数据库连接,文件句柄,套接字等资源,还是需要在程序中进行显式回收的。使用Lambda表达式可以实现一种叫做Execute Around的模式,用来原创 2014-10-26 11:33:03 · 4754 阅读 · 0 评论 -
[Java 8] (5) 使用Lambda表达式进行设计
使用Lambda表达式进行设计在前面的几篇文章中,我们已经见识到了Lambda表达式是如何让代码变的更加紧凑和简洁的。这一篇文章主要会介绍Lambda表达式如何改变程序的设计,如何让程序变的更加轻量级和简洁。如何让接口的使用变得更加流畅和直观。使用Lambda表达式来实现策略模式假设现在有一个Asset类型是这样的:public class Asset {原创 2014-10-25 06:37:22 · 7041 阅读 · 3 评论 -
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归
递归优化很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio原创 2014-10-29 09:56:32 · 16218 阅读 · 1 评论 -
[Java 8] (2) Lambda在集合中的使用
Lambda在集合中的使用列表的遍历提起对于集合的遍历,恐怕下面的这种方式已经是一种思维定式了吧:final ListString> friends = Arrays.asList("Brian", "Nate", "Neal", "Raju", "Sara", "Scott");for(int i = 0; i friends.size(); i++) {原创 2014-10-21 09:54:25 · 37073 阅读 · 12 评论 -
[Java 8] (1) 函数式编程简介
思维方式的转变以从一个城市集合中寻找是否存在Chicago为例:习惯的方式boolean found = false;for(String city : cities) { if(city.equals("Chicago")) { found = true; break; }}System.out.println("Fo原创 2014-10-17 13:49:01 · 18970 阅读 · 1 评论 -
JDK 8 函数式编程最佳实践
文章导航JDK 8 函数式编程最佳实践1. Lambda表达式的重要接口1.1 新增的函数接口1.1 无参数,无返回值类型接口1.2 无参数,有返回值类型接口1.3 有参数,也有返回值的类型接口2. 方法引用2.1 静态方法引用2.2 实例方法引用2.3 构造方法引用3. 使用Lambda表达式完成集合的规约操作3.1 成为一个单值类型3.2 成为一个集合类型3.3 stream和parallel...原创 2019-07-12 21:05:12 · 2030 阅读 · 0 评论