java8新特性--StreamAPIJava8增加了一个新的抽象流Stream,它可以让你以一种类似于用SQL语句从数据库中查询数据的直观方式来处理数据:转换一个源数据进入流中进行操作。数据源:可以是集合、数组、I/O通道、生成器等。优点:StreamAPI可以大大提高Java程序员的生产力,让程序员写出高效、干净、简洁的代码。示例:获取用户名集合,用户名不为空ListuserList=userService.list();Listpids=userList.stream().filter(Objects::nonNull).map(User::getName).collect(Collectors.toList());过滤、映射、转换为集合操作都包括创建StreamStream.of:这个静态方法可以直接手动生成流Streamstream=Stream.of("A","B","C","D");基于数组的String[]array=newString[]{"A","B","C"};Streamstream=Arrays.stream(array);基于集合Listlist=newArrayList();list.add("A");list.add("B");list.add("C");Streamstream=list.stream();mapmap方法用于将每个元素映射到对应的结果。下面的代码片段使用map输出元素对应的平方数(去重):Listnumbers=Arrays.asList(3,2,2,3,7,3,5);//得到对应的平方数ListsquaresList=numbers.stream().map(i->i*i).distinct().collect(Collectors.toList());filter:filter方法用于通过设置的条件过滤掉元素。以下代码片段使用filter方法过滤掉空字符串(数字):Liststrings=Arrays.asList("abc","","bc","efg","abcd","","jkl");//获取空字符串的个数longcount=strings.stream().filter(string->string.isEmpty()).count();Collectors:Collectors类实现了很多归约操作,比如将Replaced转换为set和aggregate元素。收集器可用于返回列表或字符串://turnlistListstrings=Arrays.asList("abc","","bc","efg","abcd","","jkl");Listfiltered=strings.stream().filter(string->!string.isEmpty()).collect(Collectors.toList());//转给set(set中没有重复元素)Setset=strings.stream().collect(Collectors.toSet());//合并字符串System.out.println("Filterlist:"+filtered);StringmergedString=strings.stream().filter(string->!string.isEmpty()).collect(Collectors.joining(","));System.out.println("要合并的字符串:"+mergedString);//转为MapListpersonList=newArraylist();personList.add(newPerson("1001","张三"));personList.add(newPerson("1002","张四"));personList.add(newPerson("1003","张武"));//以Person的id为key,Person对象为value,(a,b)->a表示如果a和b的key是相同,则取a为值(解决key值冲突)MapresultMap=personList.stream().collect(Collectors.toMap(Person::getId,v->v),(a,b)->a);forEach:Stream提供了一个新方法'forEach'来迭代流中的每个数据下面的代码片段使用forEach输出10个随机数:Randomrandom=newRandom();random.ints().limit(10).forEach(System.out::println);limit:limit方法用于获取指定的流数。下面的代码片段使用limit方法打印出10条数据:Randomrandom=newRandom();random.ints().limit(10).forEach(System.out::println);sorted:sorted方法用于对流进行排序。以下代码片段使用sorted方法对10个随机数的输出进行排序:Randomrandom=newRandom();random.ints().limit(10).sorted().forEach(System.out::println);skip:skip方法用于跳过流数据并将其转换为新的流流。skip(2)将返回一个空集合List.of("A","B","C","D"如果数据小于2),"E","F").stream()。skip(2)//跳过A,B.limit(3)//拦截C,D,E.collect(Collectors.toList());