本篇采用示例的形式展示Java8的常见特性应用.
线程写法
Java8之前
1 | new Thread(new Runnable() { |
Java8写法
1 | new Thread(()-> { |
比较器写法
Java8之前
1 | List<String> list = Arrays.asList("bb", "a", "ccc"); |
Java8写法
1 | Collections.sort(list, (o1, o2) -> o1.length() - o2.length()); |
遍历写法
Java8之前
1 | List<String> list = Arrays.asList("bb", "a", "ccc"); |
Java8写法
1 | List<String> list = Arrays.asList("bb", "a", "ccc"); |
计算过滤
1 | List<Integer> numbers = Arrays.asList(20,22,1,2,1,3,3,2,4,8,16); |
对列表每个元素应用函数
1 | List<String> list = Arrays.asList("USA", "Japan", "France", "Germany", "Italy","Canada"); |
lambda表达式中的Map Reduce
1 | List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400); |
集合元素计算
1 | List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29); |
集合元素分组
1 | public static void main(String[] args) { |
集合对象排序
1 | public static void main(String[] args) { |
函数式接口
1 | // 函数接口定义 |
函数接口应用
我们在用全文索引的时候需要将数据先存储到索引然后进行搜索,索引数据一般操作有全量索引、增量索引、实施索引, 索引创建方式可能有databus、基于消息机制、或者基于定时任务等等.
通常我们把DB数据转换为搜索引擎的索引的时候,分两步:
- 筛选出待索引的数据
- 将目标数据进行索引
针对这个行为我们来定义行为规约, 函数接口定义时使用@FunctionalInterface
筛选数据行为
1 | /** |
索引数据行为规约
1 | /** |
全量索引行为抽象
1 |
|
上面我们做了简单的全量索引行为抽象, 从第一页开始分页加载数据进行索引,直到我们加载到的数据为空,本次索引行为结束
特定索引行为抽象
1 | /** |
该抽象比较简单,直接进行指定的数据索引即可.
规约使用
上面我们定义了规约, 接下来直接展示如何优雅的基于规约装载数据
1 | /** |
示例中分别展示了全量索引和特定数据索引的规约应用,通过函数接口功能打包.我们把全量和增量的行为就隐藏在了规约行为中,使业务代码更简洁优雅.
接口方法
1 | public static void main(String[] args) { |
Java8日期操作
1 | /创建日期 |
日期格式化
java.util.date和java.time.LocalDateTime格式化
应用示例
1 | /** |
示例测试
1 | // 2017-08-28 15:45:02 |
日期转换
java.util.date和java.time.LocalDateTime互相转换
应用示例
1 | /** |
示例测试
1 | String patternTime = "yyyy-MM-dd HH:mm:ss"; |
日期区间集合
计算两端日期之间内的日期天数集合
示例代码
1 | /** |
示例测试
1 | String patternDate = "yyyy-MM-dd"; |
日期加减
示例代码
1 | String patternDate = "yyyy-MM-dd HH:mm:ss"; |
日期推算
示例代码
1 | String patternDate = "yyyy-MM-dd"; |
Optional类说明
Optional类的Javadoc描述如下:
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional基础对象处理
示例代码
1 | // 有则返回, 无则由函数产生 |
示例输出
1 | [1, 2, 3] |
Optional基础集合处理
示例代码
1 | List<Integer> list = Arrays.asList(1, 2, 3, 2, 5, 3); |
示例输出
1 | [1, 2, 3, 5] |
Optional复杂集合处理
示例代码
1 |
|
示例输出
1 | 默认姓名 |
Nashorn JavaScript引擎
1 | ScriptEngineManager manager = new ScriptEngineManager(); |
Base64支持
1 | final String text = "Base64 finally in Java 8!"; |