明天整顿了一波Lambda的简单操作,就是Map filter reduce操作。有问题您就评论。
Stream
外部不存储data
不会扭转data
源实际上是任何一种起源,不分明外部元素数量

//返回一个空的StreamStream.empty();//返回一个Singleton的StreamStream.of("one");//多个元素的StreamStream.of("one","two","three")//创立一个有限的one的StreamStream.generate(() -> "one");//创立一个有限的Stream,第一个元素是“+”,第二个“++”,第三个“+++”顺次类推Stream.iterate("+", s -> s+"+");//创立一个随机流的Stream,ints()返回的是随机整数值ThreadLocalRandom.current().ints();//通过字符拆分成char的StreamIntStream stream1 = "Hello".chars();//通过正则表达式创立的StreamString book = "";Stream<String> words = Pattern.compile("[^\\p{javaLetter}]").splitAsStream(book);//通过文件读取的行的StreamStream<String> lines = Files.lines(Paths.get("/Users/buxuesong/Documents/svn_code/demo/test.txt"));System.out.println(lines);//通过Builder创立Stream.BuilderStream.Builder<String> builder = Stream.builder();//能够通过链模式增加元素builder.add("one").add("two").add("three");//能够通过accept承受元素builder.accept("four");//将builder转换为Stream流Stream<String> stream2 = builder.build();//输入stream流的内容stream2.forEach(System.out::println);

map()办法,能够扭转stream的类型
filter()办法,不扭转stream的类型,然而可能会扭转stream外部的数量
peek()办法,和forEach相似,然而能够返回Stream,以供filter持续解决,peek属于两头调用

//Map/filter/reducepeople.stream() //Stream<Person>        .map(p -> p.getAge())//Stream<Integer>        .filter(age -> age>20)//Stream<Integer>        .forEach(System.out::println);

如何辨别终端调用还是两头调用,两头调用反会的还是流,如果不是流则为终端调用
skip()办法,跳过从开始到第n个元素
limit()办法,从开始限度到第n个元素

people.stream()        .skip(2)        .limit(3)        .map(p -> p.getAge())        .peek(System.out::println)        .filter(age ->age>22)        .forEach(System.out::println);

Match Reduction的办法类型:
anyMatch(),allMatch(),noneMatch()返回后果均为boolean,他们可能不会评估所有的元素的位次,因而被称为short-circuiting terminal短路终端操作。

boolean b = people.stream().anyMatch(p -> p.getAge()>20);Find Reduction的办法类型:findAny(),findFirst()

Stream.generate()留神肯定要应用limit办法,否则会有限循环上来

Stream<String> stream = Stream.generate(() -> "one");stream.limit(4).forEach(System.out::println);\\输入oneoneoneonestream = Stream.iterate("+", s -> s+"+");stream.limit(5).forEach(System.out::println);\\输入+++++++++++++++

IntStream

IntStream intStream = ThreadLocalRandom.current().ints();intStream.limit(5).forEach(System.out::println);\\输入1259268410-1738334784-816674339-2136871006-366691383