外观

TOPIC COLLECTION
JDK8新特性
JDK8的新特性
19 篇文章专题文章
集合遍历 forEach() 方法
本文中,我们将介绍一个 java.util.concurrent 包提供的用于解决并发生产者 – 消费者问题的最有用的类 – BlockQueue。我们将介绍BlockingQueue 接口的 API 以及如何使用该接口的方法使编写并发程序更容易。 在本文的后面,我们将展示一个具有多个生产者线程和多个消费者线…
接口静态方法
本章节我们来讨论下 [java.util.concurrent.CountDownLatch][] 这个类,顺带演示下如何在一些实际例子中使用它。 CountDownLatch 类的作用呢? 怎么说呢? 简单来说,我们可以使用它来阻塞线程,直到其他线程完成给定任务。 并发编程中使用 CountDownLatc…
接口 ( interface ) 默认方法
总所周知,在 Java 7 和之前的版本中,接口 interface 是不能包含具体的方法实现的。 比如,下面的代码,是会报错的。 运行结果如下 如果一个接口有多个实现,那么每个实现都要重复的一遍一遍的实现接口中的所有方法,岂不是很痛苦。 在Java 7 及以前的版本,对于一个接口有多个实现的时候,我们通常的…
方法引用
Java 8 中新增加了 方法引用 这个概念。 但,什么是方法引用呢 ? 我们先来看一个例子,下面这个范例演示了如何遍历字符串列表并进行一些操作 LambdaTester.java 运行结果如下 有简洁代码倾向的我们,看到那重复的 for(String st: list) 就会想如何能够直接把代码改的更简洁一…
Lambda 表达式 ( 下 )范例
经过Java 8 Lambda 表达式 ( 上 )- 简介 和 Java 8 Lambda 表达式 ( 中 )- 外部参数 两个章节的学习,想必你已经对 Java 8 中的 Lambda 表达式已经非常熟悉了。 本章节我们就来回顾下上面两章节的所学知识,然后写一些范例巩固下。 回顾 lambda 表达式是 j…
Lambda 表达式 ( 中 )- 外部参数
在Java 8 Lambda 表达式 ( 上 )- 简介 章节中我们讲解了 Java 8 Lambda 表达式的一些基础知识。我们也了解 Java 8 Lambda 表达式的一些使用场景: Java Lambda 表达式主要用于定义函数接口的内联实现。而函数接口,就是只包含了一个方法的接口。在前一章节中,我们…
Lambda 表达式 ( 上 )- 简介
Lambda 表达式在 Java 8 中引入,并且被吹捧为 Java 8 最大的特性。 Lambda 表达式是函数式编程的的一个重要特性,标志者 Java 向函数式编程迈出了重要的第一步。 Java Lambda 表达式语法 Java Lambda 表达式的语法结构如下 实际代码可能如下 有参数且只有一条语句…
java.util.Base64 编码解码
Base64 是一种常见的字符编码解码方式,一般用于将二进制数据编码为更具可读性的 Base64 进制格式。 在Java 6 ( JDK 1.6 ) 之前, JDK 一直没有包含 Base64 的实现类。因此大部分人都使用 Sum/Orale JDK 里面的 sun.misc.BASE64Encode 和su…
Runnable Lambda 表达式
本章节我们重点来讲讲 Java 8 中的 Runnable Lambda 表达式。众所周知,Java 8 中的 Runable 和 Callable 两个接口都添加了 @FunctionalInterface 注解,因此我们可以直接使用 Lambda 表达式来代替它们的 run() 和 call() 方法 R…
流 Stream ( 下 )
上一章节 Java 8 流 Stream ( 上 ) 因为时间关系,我们介绍到一半半就停止了。本章节我们继续。 limit() 方法 limit() 方法用于减少( 限制 ) 流中的元素数量。 例如下面的代码段演示了如何使用 limit() 方法只输出 10 个随机数 sorted() 方法 sorted()…
流 Stream ( 上 )
流(Stream ) 是 Java 8 新增加的一个重磅级的功能。流是一个抽象层。有了流,我们就可以使用类似于 SQL 语句的声明方式来处理数据。 比如,下面的 SQL 语句 上面这条 SQL 会自动返回最高学习绩点的学生的信息,而全程,开发人员却不用直接面对任何计算和比较。 在流( Stream ) 出现之…
新日期时间 API ( 下 ) – 格式化
Java 8 似乎也对 java.text.SimpleDateFormat 也不太满意,竟然重新创建了一个 java.time.format 包,该包下包含了几个类和枚举用于格式化日期时间。 java.time.format 包 java.time.format 包提供了以下几个类用于格式化日期时间 类 说…
新日期时间 API ( 中 ) – 时区日期时间
上一章节 Java 8 新日期时间 API ( 上 ) – 本地日期时间 我们对 Java 8 重新设计的日期时间 API 做了一些基础的介绍,同时详细介绍了和本地时间有关的几个类 LocalDateTime 、LocalDate 和 LocalTime 。 我同时也发现,这三个类没有任何时区相关的信息,但也…
新日期时间 API ( 上 ) – 本地日期时间
作为开发者,经常需要处理日期时间。如果你跟随者 Java 5 一路走来,那么一定会对 java.util.Date 、java.util.Calendar 、java.util.GregoiranCalendar 和 java.text.SimpleDateFormat 四大类非常熟悉,它们分别用于处理日期、…
Nashorn JavaScript
对于Java 中的 JavaScript 引擎, Java 8 引入了 Nashorn 来代替原先的 Rhino。 Nashorn 使用 Java 7 中引入的调用动态特性,且直接编译内存中的代码并将字节码传递给 JVM。这两项改进,直接给 Nashorn 带了至少 2 到 10 倍的性能提升。 jjs 在N…
可选值 java.util.Optional 类
在不考虑竖起来的情况下,抛一个硬币,落地时,显示正面的情况只有两种:是正面和不是正面。很多时候,这是一个 「 谓词 」,也就是返回布尔类型 ( bool )。但有时候,我们需要返回另一种类型:存在 和 空。 存在 就是硬币落地时显示为正面 空 就是硬币落地式显示的不是正面。 从另一方面说,结果就是 有值 和 …
Collectors.joining() 详解
本章节我们来详细讲讲 Java 8 流 ( stream ) 收集器 ( Collectors ) 中的 joining() 方法。该方法会返回一个 Collectors 实例,方便在流收集器上的链式操作。 Collectors.joining() 方法以遭遇元素的顺序拼接元素。我们可以传递可选的拼接字符串、…
Java 8 – IntStream,LongStream,DoubleStream
本章节我们提供一些 Java 8 中的 IntStream、LongStream 和 DoubleStream 使用范例。IntStream、LongStream 和 DoubleStream 分别表示原始 int 流、 原始 long 流 和 原始 double 流。 这三个原始流类提供了大量的方法用于操作…
Java 8 – 收集器 – java.util.stream.Collectors
Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作。 本章节,我们就来看看那些常用的方法,顺便写几个示…