阿凡认为JDK8现在很流行,现在差不多70%的公司都已经在用了,虽然大部分公司已经换成了JDK8,但是对于编码习惯,还是可以看一个很多可以优化的代码。毕竟,如果您使用JDK8进行编码,您的代码将看起来很优雅。阿粉今天就来看看JDK7和JDK8中可以“优化”的一些代码。由于JDK8的fro循环指的是for循环,所以不比较就没有坏处。让我们比较一下使用JDK7的for循环和使用JDK8的for循环。在获取List中所有人的ID之前,我们先给原始List赋值。privatestaticListgetList(){Useruser=newUser();user.setId(UuidUtil.genLmnId());user.setName("张三");user.setAge(20);user.setDeptName("开发部");Listlist=newArrayList();list.add(用户);用户user2=newUser();user2.setId(UuidUtil.genLmnId());user2.setName("李四");user2.setAge(21);user2.setDeptName("财务部");list.add(user2);用户user3=newUser();user3.setId(UuidUtil.genLmnId());user3.setName("王舞");user3.setAge(22);user3.setDeptName("运维部");list.add(user3);返回列表;}我们一会儿直接调用就可以了,User对象很简单:@DataclassUser{privateStringid;私有字符串名称;私人整数年龄;privateStringdeptName;}JDK7获取List中的Id数据://给List赋值Listlist=getList();//NewIdListListids=newArrayList<>();对于(用户用户:列表){Ids.add(用户.getId());}JDK8获取Id数据:Listjdk8Ids=list.stream().map(User::getId).collect(Collectors.toList());System.out.println("JDK8的获取数据====="+JSON.toJSON(jdk8Ids));这时候有人会说,这是什么东西,就这一段代码?传统的获取List数据中年龄大于等于21的人的方法,想都别想,直接遍历即可,遍历后判断年龄是否大于21,然后添加到新的目的。这个想法是对的,那就试试吧。//给列表赋值Listlist=getList();//新建列表ListnewList=newArrayList<>();for(Useruser: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,我们看一下代码:Listcollect=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}]这个filter很方便,虽然内部还是循环,但是至少让我们在写代码的时候,直接省略了写循环的内容,就不用自己继续写循环了,是不是方便自己节省很多时间呢?接下来我们在User里面放一个运维部门的数据。用户user4=newUser();user4.setId(UuidUtil.genLmnId());user4.setName("赵六");user4.setAge(22);user4.setDeptName("运维部");list.add(用户4);这个时候我们并没有从数据库端对数据进行分组,有时候可能很多服务调用同一个接口,但是由于数据格式要求不一致,我们不能重写同一个逻辑代码,只能说是根据一些参数的差异,返回值被处理,此时使用另一个测试操作。如果我们要用SQL按部门返回不同部门人员的数据,按照部门分组就很简单了。如果它在代码中怎么办?使用我们最简单的用户来分组。JDK8简单明了。Map>collect=list.stream().collect(Collectors.groupingBy(User::getDeptName));我们看返回的数据:JDK8的获取数据==={"开发部":[{"deptName":"开发部","name":"张三","id":"165035610923271907","age":20}],"财务部":[{"deptName":"财务部","name":"李四","id":"165035610923228403","age":21}],"运维Department":[{"deptName":"运维部","name":"王武","id":"165035610923247204","age":22},{"deptName":"运维部","name":"赵刘","id":"165035610923285576","age":22}]}直接分组显示我们想要的数据。那么如果要用JDK7来处理这种分组情况,应该怎么处理呢?第一步是考虑列表中的不同部门,然后将它们分组吗?就是这样,我想头痛。如果会操作数据库,可以直接对数据库进行分组,但是总会有一些特殊情况需要我们考虑。所以,学习上绝对没有缺点。今天阿芬说的这些简单快捷的小知识你知道怎么用吗?