@Testpublic void demo1(){ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < 10; i++){list.add(i);}/*** map* collector* filter* stream*///stream顺序处理,底层用来fork/Join框架System.out.println("stream顺序处理");Stream<Integer> stream = list.stream();long s = System.currentTimeMillis();
// stream.forEach(elem -> System.out.println(elem));
// System.out.println(stream);long e = System.currentTimeMillis();long spendTime = (e - s)/1000;//并行流式处理System.out.println("并行流式处理");long ps = System.currentTimeMillis();Stream<Integer> integerStream = list.parallelStream();System.out.println("总结:");
// integerStream.forEach(elem -> System.out.println(elem));long pe = System.currentTimeMillis();long spendTime2 = (pe - ps)/1000;System.out.println(spendTime + " s" + "\t" + spendTime2 + "s");/*** map功能:* 1.从原始的list中取值后,通过stream返回一个新的集合*/List<String> streamListMap = list.stream().map(n -> String.valueOf(n * 2)).collect(Collectors.toList());System.out.println("map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素");System.out.println(streamListMap);/*** collector收集器:* 将流中的元素放入到一个List集合当中*/System.out.println("将流中的元素放入到一个List集合当中");List<String> collectList = streamListMap.stream().collect(Collectors.toList());System.out.println(collectList);//filter//过滤奇数List<Integer> collectFilter = list.stream().filter(elem -> {return elem % 2 == 0;}).collect(Collectors.toList());System.out.println(collectFilter);List<Integer> collectFilter2 = list.stream().filter(elem -> elem % 2 == 0).collect(Collectors.toList());System.out.println(collectFilter2);//stram map filter collector//distinct去重ArrayList<Integer> intList = new ArrayList<Integer>(){{add(1);add(1);add(2);}};System.out.println("distinct去重");Stream<Integer> distinct = list.stream().distinct();System.out.println(distinct.collect(Collectors.toList()));//sort排序ArrayList<People> peopleObjects = new ArrayList<People>(){{add(new People("wangwu", 30));add(new People("zhangsan", 10));add(new People("lisi", 20));}};System.out.println("sort排序");//正序System.out.println("正序排序");Stream<People> sortedList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge));System.out.println(sortedList.collect(Collectors.toList()));//倒序System.out.println("降序");Stream<People> reversedSortList = peopleObjects.stream().sorted(Comparator.comparing(People::getAge).reversed());System.out.println(reversedSortList.collect(Collectors.toList()));//peek 对对象的进行操作System.out.println("peek 对对象的进行操作");Stream<People> peekStream = peopleObjects.stream().peek(elem -> elem.setAge(elem.getAge() * 2));System.out.println(peekStream.collect(Collectors.toList()));//截断limitSystem.out.println("limit取出前三个");Stream<Integer> limitStream = list.stream().limit(3);System.out.println(limitStream.collect(Collectors.toList()));//跳过skipSystem.out.println("skip跳过前五个");Stream<Integer> skipStream = list.stream().skip(5);System.out.println(skipStream.collect(Collectors.toList()));}class People{String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public People(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "PeekObject{" +"name='" + name + '\'' +", age=" + age +'}';}}
控制台打印:
stream顺序处理
并行流式处理
总结:
0 s 0s
map 方法的用途是将旧数据转换后变为新数据,是一种 1:1 的映射,每个输入元素按照规则转换成另一个元素
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
将流中的元素放入到一个List集合当中
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8]
distinct去重
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sort排序
正序排序
[PeekObject{name='zhangsan', age=10}, PeekObject{name='lisi', age=20}, PeekObject{name='wangwu', age=30}]
降序
[PeekObject{name='wangwu', age=30}, PeekObject{name='lisi', age=20}, PeekObject{name='zhangsan', age=10}]
peek 对对象的进行操作
[PeekObject{name='wangwu', age=60}, PeekObject{name='zhangsan', age=20}, PeekObject{name='lisi', age=40}]
limit取出前三个
[0, 1, 2]
skip跳过前五个
[5, 6, 7, 8, 9]