聊聊JDK8的几个方便快捷知识

开发 前端
如果我们要用SQL,那很简单,根据部门分组,如果要是在代码里面呢?就用我们最简单的User来进行分组。

阿粉相信,JDK8 现在已经是非常普及的了,现在几乎百分之七十以上的公司都已经在使用了,虽然大部分的公司都换上了 JDK8 但是对于编码习惯来说,依然能够看到很多属于可以优化的代码,毕竟使用JDK8 进行编码的话,会让自己的代码看起来很优雅。阿粉今天就来看看一些 JDK7 和 JDK8 中的一些可以"优化"的代码。

JDK8 的 fro 循环

既然要说for循环,那么没有对比就没有伤害,我们来对比一下使用 JDK7 的 for 循环和使用 JDK8 的 for 循环。

获取List中所有人员的ID

获取值之前我们先给原始的 List 进行赋值。


private static List<User> getList() {
User user = new User();
user.setId(UuidUtil.genLmnId());
user.setName("张三");
user.setAge(20);
user.setDeptName("开发部");
List<User> list = new ArrayList();
list.add(user);

User user2 = new User();
user2.setId(UuidUtil.genLmnId());
user2.setName("李四");
user2.setAge(21);
user2.setDeptName("财务部");
list.add(user2);

User user3 = new User();
user3.setId(UuidUtil.genLmnId());
user3.setName("王五");
user3.setAge(22);
user3.setDeptName("运维部");
list.add(user3);
return list;
}

一会我们直接调用就可以了,User对象很简单:

@Data
class User{
private String id;
private String name;
private Integer age;
private String deptName;
}

JDK7获取List中的Id数据:

 //给List赋值
List<User> list = getList();
//新的IdList
List<String> Ids = new ArrayList<>();
for (User user: list) {
Ids.add(user.getId());
}

JDK8 获取Id数据:

 List<String> jdk8Ids = list.stream().map(User::getId).collect(Collectors.toList());
System.out.println("JDK8的获取数据==="+JSON.toJSON(jdk8Ids));

这个时候就有的人会说,这算啥,就这点代码?

获取List数据中年龄大于等于21的人

传统做法,不用想,直接遍历,遍历之后,判断一下年龄是否是大于21,然后加入到新的对象中。这想法没错,那么我们来试试。

  //给List赋值
List<User> list = getList();
//新的list
List<User> newList= new ArrayList<>();
for (User user: list) {
if (user.getAge() >= 21){
newList.add(user);
}
}
System.out.println("JDK7的获取数据==="+JSON.toJSON(newList));

结果是对的,能准确筛选出我们要的数据:

JDK7的获取数据===[{"deptName":"财务部","name":"李四","id":"165001403518349849","age":21},{"deptName":"运维部","name":"王五","id":"165001403518375639","age":22}]

JDK8 怎么实现?那就是filter,代码来看看:

 List<User> collect = list.stream().filter(user -> user.getAge() >= 21).collect(Collectors.toList());
System.out.println("JDK8的获取数据==="+JSON.toJSON(collect));

我们看看数据:

JDK8的获取数据===[{"deptName":"财务部","name":"李四","id":"165001458145431986","age":21},{"deptName":"运维部","name":"王五","id":"165001458145466505","age":22}]

这个筛选,那是非常的方便,虽然内部还是循环,但是至少让我们在写代码的时候,把写循环这一块的内容直接给省略掉了,不用再继续的去自己去写循环,是不是就很便利的给自己省下了一大堆的时间。

接下来我们再给User里面放一个运维部的数据。


User user4 = new User();
user4.setId(UuidUtil.genLmnId());
user4.setName("赵六");
user4.setAge(22);
user4.setDeptName("运维部");
list.add(user4);

这时候,我们没从数据库端进行数据的分组,可能有时候同一个接口要给很多服务去调用,但是我们又不能为了因为数据格式要求不一致,就重新在写一段相同的逻辑代码,只能说是根据某些参数的不同,处理一下返回值,这时候就用到另外测操作了。

按照部门返回不同部门下的人员的数据

如果我们要用SQL,那很简单,根据部门分组,如果要是在代码里面呢?就用我们最简单的User来进行分组。

JDK8 直接简单方便。

Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getDeptName));

我们看看返回的数据:

JDK8的获取数据==={
"开发部":[{"deptName":"开发部","name":"张三","id":"165035610923271907","age":20}],
"财务部":[{"deptName":"财务部","name":"李四","id":"165035610923228403","age":21}],
"运维部":[{"deptName":"运维部","name":"王五","id":"165035610923247204","age":22},
{"deptName":"运维部","name":"赵六","id":"165035610923285576","age":22}]}

直接分组好了展示我们想要的数据。那如果要使用JDK7 处理这种分组的情况,应该怎么处理呢?

是不是第一步要先考虑出循环出这个List里面都有哪些不同的部门,然后进行分组?

就这样,我想想都觉得头疼。要是能数据库操作,那直接数据库分组一下不就完事了,但是总是会有特殊情况需要我们去考虑的。所以,学会了绝对不吃亏。

阿粉今天说的这些简单快捷的小知识,你会用了么?

责任编辑:武晓燕 来源: Java极客技术
相关推荐

2022-04-21 09:48:54

JDK8JDK7编码

2022-05-31 07:32:19

JDK8API工具

2009-12-03 09:23:17

PHP长文章分页函数

2013-11-28 10:40:55

2015-05-07 14:33:18

HTML 5编辑器中文详解

2022-03-30 07:32:10

JDK8异步编程

2021-08-05 16:36:16

Windows 11操作系统微软

2017-04-21 09:30:40

2021-08-08 14:15:30

Windows 11Windows微软

2021-08-07 07:48:28

JDKjava JDK17

2014-09-25 14:15:36

微信企业号案例

2021-01-15 10:03:18

JDK8日期API

2011-05-04 14:55:09

SP-L355三星投影机

2021-10-09 21:34:13

数字人民币微信支付宝

2022-04-18 09:54:37

JDK8日期前端

2024-04-08 07:27:02

JDK8ZGC垃圾回收

2017-03-09 10:45:31

定义内存泄漏

2021-05-19 10:37:16

WebFlux 前置工具

2020-02-17 10:34:04

箭头函数开发 JavaScript

2021-03-12 10:12:09

etState函数React
点赞
收藏

51CTO技术栈公众号