JDK8已经发布8年了,但即便是现在,还在面试过程中,有人问JDK8优化了哪些内容。比起JDK7,今天的Fan又继续唠叨了一遍,真是服了面试官。JDK8的StreamJDK8牛逼,真的牛逼,它让你的代码更加简洁,为什么这么说呢,就是因为Stream的存在。Stream是Java8中处理集合的关键抽象。它可以指定要对集合执行的操作,并且可以执行非常复杂的操作,例如搜索、过滤和映射数据。使用StreamAPI对集合数据进行操作类似于使用SQL执行数据库查询。也可以使用StreamAPI并行执行操作。简而言之,StreamAPI提供了一种高效且易于使用的数据处理方式。其实这些语音技巧都没什么用,最重要的还是Stream的使用。Stream对筛选的使用其实很简单。你为什么这么说?因为筛选,比如我们现在有张三、李四、王五三个人,年龄分别是20岁、22岁、27岁。我们需要过滤掉20岁以上的人,合并成一个新的结果集返回,那么代码一定是:ListuserList=handleUser();列表<用户>geUser=newArrayList<>();for(Useruser:userList){if(user.getAge()>20){geUser.add(user);}}上面的handleUser只是一个赋值操作,代码也放了:handleUser(){ListuserList=newArrayList<>();用户user=newUser();user.setId(UUID.randomUUID().toString());user.setName("张三");user.setAge(20);user.setDept("开发部");用户列表。添加用户);用户user1=newUser();user1.setId(UUID.randomUUID().toString());user1.setName("李四");user1.setAge(22);user1.setDept("测试部门");userList.add(user1);用户user2=newUser();user2.setId(UUID.randomUUID().toString());user2.setName("王舞");user2.setAge(27);er2.setDept("财务部");userList.add(user2);返回用户列表;}这时候我们得到geUser的结果集,就是我们过滤后的20岁以上人群的数据。如果你用JDK8如何操作Stream?其实并不难。ListgeUserStream=userList.stream().filter(e->e.getAge()>20).collect(Collectors.toList());一行代码,直接链式编程,一行代码直接筛选出来。两者的结果是一样的。区别仅在于代码量。一个需要自己创建一个List来操作,一个不需要自己创建。以后由Collectors直接创建,也是一种简化代码的方法。Loop从这里我们看Stream的循环,for循环,JDK7和JDK8的循环本质,没有变化,只是开发者写的代码变了。直接比较写法上的区别吧。JDK7中的for循环for(Useruser:collect){System.out.println("年龄大于20的人是:"+user.getName());}JDK8的for循环collect.stream().forEach(vo->{System.out.println("20岁以上的人是:"+vo.getName());});looping区别好像不大,好像很方便,所以用什么看你自己。聚合函数为什么说聚合函数呢?这个聚合函数用的最多的地方就是在数据库中,我们拿到的时候,max,min,count,这些聚合字段都会用到。程序中如果要过滤,那双层for循环是避免不了的,然后再去循环比较,或者通过Collections来处理,但是如果用Stream,就很简单了。//JDK7获取List中最长的字符串String[]strArr=newString[]{"cd","ab","ddfa","sd","zd"};Listlist=Arrays.asList(strArr);Stringmax=Collections.max(list,newComparator(){@Overridepublicintcompare(Stringo1,Stringo2){if(o1.length()中最长的字符串String[]strArr=newString[]{"cd","ab","ddfa","sd","zd"};Listlist=Arrays.asList(strArr);可选max=list.stream().max(Comparator.comparing(String::length));System.out.println(max.get());两者返回的结果也是一样的,但是就代码量来说,不是一个级别的。至少JDK8可以简化很多代码。至少在开发效率上,相对来说是比较快的。分钟也是如此。在此不再赘述。接下来说说这个计数。一般计数用在什么地方?count()是获取流总数的简写方法。其实和size是同一个意思,只是size不能和一些??filter一起用,count可以。ListnumList=Arrays.asList(42,44,43,41);//获取List中大于43的元素个数longcount=numList.stream().filter(e->e>43)。数数();System.out.println(计数);这样看,是不是觉得Stream中的方法有时候是有用的,至少在代码上,可以为我们节省很多时间。其实还有一些Map并不是那么常用的,比如Map,一般属于那种不能链接查询的用法。比如我们现在有一个订单表,然后订单表里面有一个关联的支付状态。这个有时候可能会出现一个订单对应多个支付的情况,但是如果数据量非常大,不适合使用联表查询,只能先查询订单,而然后使用in方法查询支付条件。我们继续使用上面的User对象。JDK7获取List中的Id数据://AssignListtoListListlist=getList();//NewIdListListListids=newArrayList<>();对于(用户用户:列表){ID。添加(用户。getId());}JDK8获取Id数据Listjdk8Ids=list.stream().map(User::getId).collect(Collectors.toList());System.out.println("JDK8的数据获取==="+JSON.toJSON(jdk8Ids));那么我们就可以通过id来查询指定的数据了。很高兴知道如何使用Stream。面试真的被问到的时候,知道这些关键词是干什么用的就可以了。如果几年前还有人问起这件事情,那这家公司似乎就没有必要进入了。.你是这样说的吗?