Java8 Stream Api使用详解

jdk8发布至今已有几年有余,是一个影响深远且具有革命意义的版本,目前jdk版本已直奔v11.0, 发展之迅速让人始料未及。本文在假设已有 java8 lambda 语法的基础下,通过几个示例,快速上手Stream 流处理相关的 API 使用。

什么是流操作

流操作就是一条流水线,将元素放在流水线上一个个地进行处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
List<User> list = Lists.newArrayList(user1,user2);
List<String> resultList =
list.
// 将集合转换成流对象
stream()
// 将List<User>遍历,将每个元素的name取出,组装成新的List<String>
.map(User::getName)
// 按照默认规则排序
.sorted()
// 只取20条数据
.limit(20)
// 收集流数据,组装成最终需要集合(List<String>)
.collect(toList())

在以上的代码中,通过短短的几行代码,行云流水般的完成了一系列操作,这些操作在 jdk7 之前,是远远不能如此简单明了而高效的。

DingTalk-通讯录单向同步实现示例

最近项目中需要实现对接钉钉,并实现单向通讯录同步(钉钉服务器 -> 对接平台)本文通过一个简单的案例快速实现相关的DEMO (本文主要实现与钉钉对接)。

钉钉API:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.LucpAu&treeId=385&articleId=104975&docType=1#s7

流程示意图


准备工作

在使用回调接口前,需要做以下准备工作:

  1. 提供一个接收消息的RESTful接口。
  2. 调用钉钉API,主动注册回调通知。
  3. 因为涉及到消息的加密解密,默认的JDK存在一些限制,先要替换相关jar:

在官方网站下载JCE无限制权限策略文件

JDK6的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

JDK8的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。

如果安装的是JRE,将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,

如果安装的是JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。

  1. 内网穿透映射本地RESTful接口到公网,推荐使用Ngrok: http://ngrok.ciqiuwl.cn/

Ubuntu下使用Shadowsocks GFWList

现有的SS客户端在Linux上仅支持全局代理,本文以Ubuntu发行版为例,配置PAC自动代理,达到无缝切换的目的。

更新系统

1
2
$ sudo apt update
$ sudo apt upgrade

安装Shadowsocks GUI

非ubuntu系统可以参考此链接自行编译

https://github.com/shadowsocks/shadowsocks-qt5

ContiPerf-更为优雅和方便的单元压力测试工具

ContiPerf 是一个轻量级的单元测试工具,基于JUnit 4二次开发,使用它基于注解的方式,快速在本地进行单元压测并提供详细的报告。

Example

新建 SpringBoot 工程

POM文件中的核心依赖如下:

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.databene</groupId>
<artifactId>contiperf</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>

RESTful-基于SpringMVC实现优雅的API响应结构设计

一个规范、易懂和优雅,以及结构清晰且易于理解的API响应结构,完全可以省去许多无意义的沟通和文档。

预览

操作成功:

1
{"succeed": true,"timestamp": 1525582485337}

操作成功:返回数据

1
2
3
4
5
6
7
8
9
10
{
"succeed": true,
"result": {
"users": [
{"id": 1, "name": "name1"},
{"id": 2, "name": "name2"}
]
},
"timestamp": 1525582485337
}

操作失败:

1
2
3
4
5
6
7
8
9
{
"succeed": false,
"error": {
"error_code": 5002,
"error_reason": "illegal_argument_error",
"error_description": "The String argument[1] must have length; it must not be null or empty"
},
"timestamp": 1525582485337
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×