今天整理了一波Lambda的复杂操作,就是Mapfilterreduce操作。如果您有任何问题,请发表评论。Stream内部不存储数据也不会改变数据源实际上是任何源,不清楚内部元素个数//返回一个空的StreamStream.empty();//返回一个Singleton的StreamStream.of("one");//多个元素的StreamStream.of("one","two","three")//创建一个无限StreamStreamStream.generate(()->"one");//创建一个无限Stream,该第一个元素是“+”,第二个“++”,第三个“+++”等等Stream.iterate("+",s->s+"+");//创建一个随机StreamStream,ints()返回一个随机整数值ThreadLocalRandom.current().ints();//将字符拆分成StreamIntStreamstream1="Hello".chars();//通过正则表达式创建StreamStringbook="";Streamwords=Pattern.compile("[^\\p{javaLetter}]").splitAsStream(book);//StreamStreamlines=Files.lines(Paths.get("/Users/buxuesong/Documents/svn_code/demo/test.txt"));System.out.println(lines);//通过Builder=Stream.builder()创建Stream.BuilderStream.Builder构建器;//可以通过链式方式添加元素builder.add("one").add("two").add("three");//可以通过accept接受元素builder.accept("four");//将builder转为StreamStreamstream2=builder.build();//输出流内容stream2.forEach(Systemm.out::println);map()方法,可以改变流的类型filter()方法,不改变流的类型,但是可以改变流里面的数peek()方法,类似于forEach,但是可以返回Stream,用于过滤器继续处理,peek属于中间调用//Map/filter/reducepeople.stream()//Stream.map(p->p.getAge())//Stream.filter(age->age>20)//Stream.forEach(System.out::println);如何区分终端调用还是中间调用,中间调用还是stream,如果不是stream,调用terminal的skip()方法,从头到第n个元素跳过limit()方法,从头到第n个limit元素people.stream().skip(2).limit(3).map(p->p.getAge()).peek(System.out::println).filter(age->age>22).forEach(System.out::println);MatchReduction的方法类型:anyMatch(),allMatch(),noneMatch()返回结果都是boolean,可能不会对所有元素的位置求值,所以称为short-circuitingterminalshort-circuitterminaloperation布尔b=people.stream().anyMatch(p->p.getAge()>20);FindReduction方法类型:findAny(),findFirst()Stream.generate()注意一定要使用limit方法,否则会无限循环Streamstream=Stream.generate(()->"one");stream.limit(4).forEach(System.out::println);\\outputoneoneoneonestream=Stream.iterate("+",s->s+"+");stream.limit(5).forEach(System.out::println);\\Output++++++++++++++++IntStreamIntStreamintStream=ThreadLocalRandom.current().ints();intStream.limit(5).forEach(System.out::println);\\输出1259268410-1738334784-816674339-2136871006-366691383