本文主要介绍了Stream流,包括集合和数组的Stream流创建方式,List和Set集合直接使用stream()方法创建,Map集合间接使用stream()方法创建,而数组使用Stream流的静态方法of()创建,介绍了Stream流的中间操作,包括过滤filter(),限制limit()和跳过skip(),拼接concat)(),去重distinct(),排序sorted()等,最后介绍了Stream流的终结操作forEach()和count(),也给出Stream流的收集操作方法和综合练习。
目录
8、Stream流的常用终结操作符forEach与count
- import java.util.ArrayList;
-
- public class StreamDemo01 {
- public static void main(String[] args) {
- ArrayList
arrayList = new ArrayList<>() ; - arrayList.add("张无忌") ;
- arrayList.add("张三");
- arrayList.add("李四");
- arrayList.add("张三丰");
- arrayList.add("刘小明");
-
- //找出姓张且名字为3个字的打印输出
- arrayList.stream().filter(s->s.length()==3).filter(s->s.startsWith("张")).forEach(System.out::println);
-
- }
- }
- import java.util.*;
- import java.util.stream.Stream;
-
- public class StreamDemo02 {
- public static void main(String[] args) {
- //Collection体系的默认使用stream()方法生成流
- List
list = new ArrayList<>() ; - Stream
stream1 = list.stream() ; -
- Set
set = new TreeSet<>() ; - Stream
stream2 = list.stream() ; -
- //Map集合使用间接的方式生成
- Map
map = new HashMap<>() ; - Stream
stream3 = map.keySet().stream() ; - Stream
stream4 = map.values().stream() ; - Stream
> stream5 = map.entrySet().stream() ; -
- //数组通过Stream的静态方法of()生成流
- String [] arr = {"java","python","c++"} ;
- Stream
stream6 = Stream.of(arr) ; - Stream
stream7 = Stream.of("java","python","c++") ; - Stream
stream8 = Stream.of(10,20,30) ; -
- }
- }
- import java.util.ArrayList;
- import java.util.List;
-
- public class StreamDemo03 {
- public static void main(String[] args) {
- List
list = new ArrayList<>() ; - list.add("张三");
- list.add("张无忌") ;
- list.add("孙小美") ;
- list.add("王五") ;
- list.add("张三丰") ;
-
- //找出姓张的并输出
- list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
- System.out.println("-------------");
- //找出名字长度为3的输出
- list.stream().filter(s->s.length()==3).forEach(s-> System.out.println(s));
- System.out.println("-------------");
- //找出姓张且名字长度为3的输出
- list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
- }
- }
- import java.util.ArrayList;
- import java.util.List;
-
- public class StreamDemo04 {
- public static void main(String[] args) {
- List
list = new ArrayList<>() ; - list.add("张三");
- list.add("张无忌") ;
- list.add("孙小美") ;
- list.add("王五") ;
- list.add("张三丰") ;
-
- //取前面三个元素打印
- list.stream().limit(3).forEach(System.out::println);
- System.out.println("-------------");
- //跳过两个元素,打印剩下的
- list.stream().skip(2).forEach(System.out::println);
- System.out.println("-------------");
- //跳过2个元素,剩余元素中打印前2个
- list.stream().skip(2).limit(2).forEach(s-> System.out.println(s));
- }
- }
- import java.util.ArrayList;
- import java.util.List;
- import java.util.stream.Stream;
-
- public class StreamDemo05 {
- public static void main(String[] args) { List
list = new ArrayList<>() ; - list.add("张三");
- list.add("张无忌") ;
- list.add("孙小美") ;
- list.add("王五") ;
- list.add("张三丰") ;
-
- //取前面4个元素
- Stream
s1 = list.stream().limit(4) ; - //跳过两个元素
- Stream
s2 = list.stream().skip(2) ; - //合并 前面两个并输出
- // Stream.concat(s1,s2).forEach(System.out::println);
- // System.out.println("-------------");
- //合并前面两个,去重后输出
- Stream.concat(s1,s2).distinct().forEach(s-> System.out.println(s));
-
- }
- }
- import java.util.ArrayList;
- import java.util.Comparator;
-
- public class StreamDemo06 {
- public static void main(String[] args) {
- ArrayList
arrayList = new ArrayList<>() ; - arrayList.add("zhangsan") ;
- arrayList.add("lisi") ;
- arrayList.add("wangwu") ;
- arrayList.add("malu") ;
- arrayList.add("liaoxiang") ;
-
- arrayList.stream().sorted((s1,s2)->{
- int num1 = s1.length() -s2.length() ;
- int num2 = num1==0 ? s1.compareTo(s2) : num1 ;
- return num2 ;
- }).forEach(System.out::println);
-
- System.out.println("----------------");
-
- arrayList.stream().sorted(new Comparator
() { - @Override
- public int compare(String s1, String s2) {
- int num1 = s1.length() -s2.length() ;
- int num2 = num1==0 ? s1.compareTo(s2) : num1 ;
- return num2 ;
- }
- }).forEach(s-> System.out.println(s));
-
- }
- }
- import java.util.ArrayList;
-
- public class StreamDemo07 {
- public static void main(String[] args) {
- ArrayList
arrayList = new ArrayList<>() ; - arrayList.add("10") ;
- arrayList.add("20") ;
- arrayList.add("30") ;
-
- //集合元素转换成整数后输出
- arrayList.stream().map(s->Integer.parseInt(s)).forEach(System.out::println);
-
- //集合元素转换成整数求和输出
- int sum = arrayList.stream().mapToInt(Integer::parseInt).sum() ;
- System.out.println(sum);
- }
- }
- import java.util.ArrayList;
- import java.util.List;
-
- public class StreamDemo08 {
- public static void main(String[] args) {
- List
list = new ArrayList<>() ; - list.add("张三");
- list.add("张无忌") ;
- list.add("孙小美") ;
- list.add("王五") ;
- list.add("张三丰") ;
-
- //统计集合中张开头的元素个数
- long cnt = list.stream().filter(s->s.startsWith("张")).count() ;
- System.out.println(cnt);
-
- //输出集合元素
- list.stream().forEach(System.out::println);
- }
- }
-
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.Stream;
-
- public class StreamDemo09 {
- public static void main(String[] args) {
- List
list = new ArrayList<>() ; - list.add("张三") ;
- list.add("李四") ;
- list.add("王五子") ;
-
- Stream
stream1 = list.stream().filter(s->s.length()==2) ; - List
list1 = stream1.collect(Collectors.toList()) ; //收集操作 -
- for(String s : list1){
- System.out.println(s);
- }
-
- System.out.println("---------------");
-
- Set
set = new TreeSet<>() ; - set.add(10) ;
- set.add(20) ;
- set.add(30) ;
- Stream
stream2 = set.stream().filter(s->s>=20) ; - Set
set1 = stream2.collect(Collectors.toSet()) ; - for(Integer i : set1){
- System.out.println(i);
- }
- System.out.println("---------------");
-
- String [] arr = {"张三,20","李四,19","王五,21"} ;
- //得到年龄大于等于20的流
- Stream
stream3 = Stream.of(arr).filter(s->Integer.parseInt(s.split(",")[1])>=20) ; - Map
map = stream3.collect(Collectors.toMap(s->s.split(",")[0],s->Integer.parseInt(s.split(",")[1]))) ; -
- for(String key : map.keySet()){
- System.out.println(key + ":" + map.get(key));
- }
-
- }
- }
- public class Actor {
- private String name ;
-
- public Actor(String name) {
- this.name = name;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
- }
- import java.util.ArrayList;
- import java.util.stream.Stream;
-
- public class StreamDemo10 {
- public static void main(String[] args) {
- ArrayList
arrayList1 = new ArrayList<>() ; - arrayList1.add("周伯通") ;
- arrayList1.add("杨过") ;
- arrayList1.add("郭靖") ;
- arrayList1.add("张无忌") ;
- arrayList1.add("张三丰") ;
-
- ArrayList
arrayList2 = new ArrayList<>() ; - arrayList2.add("林龙女") ;
- arrayList2.add("林黛玉") ;
- arrayList2.add("林学苑") ;
- arrayList2.add("薛宝钗") ;
- arrayList2.add("林大美") ;
-
- //男的只要名字为三个字的
- Stream
s1 = arrayList1.stream().filter(s->s.length()==3) ; - //女的只要姓林的,并且不要第一个
- Stream
s2 = arrayList2.stream().skip(1).filter(s->s.startsWith("林")) ; - //过滤后的男女名字合并到一起
- Stream
s3 = Stream.concat(s1,s2) ; - //将上一步的操作作为构造方法的参数创建对象,遍历数据
- s3.map(Actor::new).forEach(s-> System.out.println(s.getName()));
-
- }
- }