Java 8 in Action
通过示例全面讲解Java 8新特性,开启函数式编程的大门。
好好生活_
这个作者很懒,什么都没留下…
展开
-
【Java8实战】list分组、过滤、统计、排序等常用操作
引言在前面,写过java8实战系列文章,文章的内容都是基于《Java8 in Action》一书学习总结的。这段时间在项目中很多地方都用到了,但很多时候都需要现查一下该怎么写,本篇博客就来总结一下关于List的一些常用的流操作。基础代码学生实体代码如下:@Datapublic class Student implements Serializable { /** * 编号 */ private Integer id; /** * 姓名原创 2020-10-24 19:21:52 · 25703 阅读 · 1 评论 -
【Java8实战】Optional容器类API应用
引言在前面的系列博客中,有一篇文章是用Optional取代null,Optional容器类是我们在代码中避免空指针及快速定位空指针的利器。文章的最后,是Optional类下的API总结,本篇博客将把这些方法都实践一下,看下会产生怎样的结果。创建Optional对象实例of():将指定值用 Optional 封装之后返回,如果该值为 null,则抛出一个 NullPointerExcepti...原创 2020-02-29 19:18:33 · 275 阅读 · 1 评论 -
【Java8实战】为什么使用Lambda表达式
引言通过前面的系列文章,我们对Java8的新特性都有了一定的了解。但我们应该如何在项目中去应用,知道项目中什么地方可以使用,才能帮助自己有更深一步的了解。本篇文章将通过项目中的需求实例,来实践Lambda表达式。需求实例筛选公司员工集合中年龄大于35岁的员工以上需求,我们用最熟悉也是最原始的方法,就是对员工集合进行遍历,然后符合要求的员工,加入到一个新的集合中返回,代码如下://获取...原创 2020-02-28 20:23:09 · 405 阅读 · 0 评论 -
【Java8实战】新的日期和时间API
引言Java 8之前的java.util.Date类以及其他用于建模日期时间的类有很多不一致及设计上的缺陷,包括易变性以及糟糕的偏移值、默认值和命名。 本篇博客将一起探索新的日期和时间API所提供的新特性。LocalDate该类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息。我们可以通过静态工厂方法of创建一个LocalDate实例...原创 2020-02-10 19:20:00 · 357 阅读 · 0 评论 -
【Java8实战】用Optional取代null
引言对任何一位Java程序员来说,NullPointerException都是心中的痛。实例public class Person { private Car car; public Car getCar() { return car; } }public class Car { private Insurance insurance; public In...原创 2020-02-10 19:18:56 · 782 阅读 · 0 评论 -
【Java8实战】默认方法
引言传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。本篇博客的内容将要总结Java8是如何解决上述问题的。解决方案Java 8为了解决上述问题引入了一种新的机制。Java 8中的接口现在支持在声明方法的同时提供实现。...原创 2020-01-22 17:26:12 · 548 阅读 · 0 评论 -
【Java8实战】并行流
引言在前面,学习使用Lambda表达式的过程中,对于集合的处理,都会使用到Stream流处理。为了提高性能,我们可以使用parallelStream并行流。并行流并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样一来,你就可以自动把给定操作的工作负荷分配给多核处理器的所有内核,让它们都忙起来。实例代码比如,我们求1到n一组数的和,用传统的java代码实现,如...原创 2020-01-22 15:09:21 · 1415 阅读 · 1 评论 -
【Java8实战】用流收集数据
引言通过前面的学习,我们知道了,流可以用类似于数据库的操作处理集合。它们支持两种类型的操作:中间操作(如filter或map)和 终端操作(如count、findFirst、forEach和reduce)。中间操作可以链接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗流,以产生一个终结果,例如返回流中的最大元素。本篇博客主要介绍collec...原创 2020-01-16 17:11:23 · 368 阅读 · 0 评论 -
【Java8实战】流的操作
引言通过上篇博客,我们对流有了一定了解,本篇博客将会通过一些代码来熟悉流的各种操作。主要包括:筛选、切片、映射、查找、匹配和归约。筛选和切片(1) 用谓词筛选Streams接口支持filter方法,该操作会接受一个谓词(一个返回 boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。例如:筛选出所有素菜,创建一张素食菜单,代码如下://filter(筛选所有素食)Li...原创 2020-01-14 17:53:49 · 390 阅读 · 0 评论 -
【Java8实战】流的引入
引言集合是Java中使用多的API。但在java8之前,我们对于集合的操作大多需要涉及数据库,比如对于某个集合做筛选,都是通过sql中的where条件去实现。我们能不能不借助sql,仅仅通过操作集合就能实现?另外,在处理大量数据的情况下,又要保证程序的性能,我们的代码又该如何去写?上面的两个问题,...原创 2020-01-13 21:03:06 · 295 阅读 · 0 评论 -
【Java8实战】方法引用
引言通过前面两篇博客的学习,我们对Lambda表达式的语法和使用已经有了一定了解。而本篇博客要总结的是java8的另一功能:方法引用。简单地说,可以把它们视为某些 Lambda的快捷写法。方法引用是什么方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们似乎更易读,感觉也更自然。第一个方法引用比如,比较两个苹果重量的例子:...原创 2020-01-10 14:43:17 · 331 阅读 · 0 评论 -
【Java8实战】函数式接口
引言通过上一篇博客,对Lambda的基础语法已经有了一定了解。那么有个问题,那就是在哪里可以使用Lambda表达式呢? 答案是函数式接口。有点抽象了,本篇博客就来梳理一下。什么是函数式接口?一句话说,函数式接口就是只定义一个抽象方法的接口。在Java API中,有很多这样的接口,比如:Comparator和Runnable.public interface Comparator<T&...原创 2020-01-09 15:21:44 · 367 阅读 · 0 评论 -
【Java8实战】Lambda表达式
引言Lambda表达式的引入是Java8的新特性之一。简单地说,Lambda表达式其实是一种新的语法,简化了代码,使得代码看起来更加简洁,可读性更强。语法Lambda 表达式的基础语法:Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符。箭头操作符将 Lambda 表达式拆分成两部分:左侧:Lambda 表达式的参数列表右侧:Lambda ...原创 2019-12-31 18:02:44 · 375 阅读 · 0 评论