Stream是java8新加的流接口
获取流的方法:
1、所有的Collection集合都可以通过stream默认方法获取流
2、Stream接口的静态方法of可以获取数组对应的流
1、Collection中的方法 stream()
//list--->stream ArrayListlist = new ArrayList<>(); Stream stream = list.stream(); //set--->stream HashSet set = new HashSet<>(); Stream stream1 = set.stream(); //map--->stream HashMap map = new HashMap<>(); Set keys = map.keySet(); Stream stream2 = keys.stream();//key的stream Collection values = map.values();//value的值是非唯一的,所以用的是Collection Stream stream3 = values.stream();//values的stream
2、Stream静态方法
静态方法只能接口自己调用,子类都不用调用
StreamStream的方法stream =Stream.of("a","b","c");//of(可变参数),所以可以写多个参数
1、终结方法:返回值类型不再是stream接口自身类型的方法,终结方法只能调用一次
比如:count forEach
2、非终结方法:返回类型选仍旧是Stream接口自身类型的方法,非终结方法可以多次调用
filter limit skip concat
常用方法:
1、forEach:逐一处理
该方法并不保证元素的逐一消费动作在流中被有序执行
forEach(Consumer super T> action)
stream.forEach((String s)->{
System.out.println(s);
});
2、count:统计个数
long count=stream.count(); System.out.println(count);
3、skip:跳过前几个
skip(long n)
Streamstream =Stream.of("张三","李四","王五"); stream.skip(2).forEach((String s)-> System.out.println(s));//跳过前2个,返回王五
4、limit:取用前几个
limit(long maxSize)
Streamstream =Stream.of("张三","李四","王五"); stream.limit(2).forEach((String s)-> System.out.println(s));//取前两个,返回张三 李四
5、filter:过滤
filter(Predicate super T> predicate)
Streamstream =Stream.of("张三","李四","王五","张六"); Stream stringStream = stream.filter((String s) -> { return s.contains("张"); //过滤出包含”张“字的名字,所以返回张三 张六 }); stringStream.forEach(s -> System.out.println(s));
6、distinct:去重
stream.distinct().forEach(s-> System.out.println(s));
7、map:映射
map(Function
Streamstream =Stream.of("10","20","30","40"); Stream integerStream=stream.map((String s)->{ return Integer.parseInt(s); }); integerStream.forEach((Integer i)-> { System.out.println(i); }); //打印 10 20 30 40
Streamstream =Stream.of("张三","李四","王五"); Stream personStream = stream.map((String name)->{ return new Person(name); });
8、concat:合并
concat(Stream a,Stream b)将stream对象a和b合并为一个新的stream流对象
Stream< String> stream1 =Stream.of("aa","bb","cc");
Stream< String> stream2 =Stream.of("张三","李四","王五");
Stream< String> stringStream = Stream.concat(stream1,stream2); //将两个对象合并起来
Stream流转化为集合或者数组
1、转化为List集合
2、转化为数组
Streamstream =Stream.of("aa","bb","cc"); //stream---->List List list=stream.collect(Collectors.toList()); System.out.println(list); //stream--->Set Set set = stream.collect(Collectors.toSet()); System.out.println(set); //stream--->ArrayList,toCollection 单独某一个集合 ArrayList arrayList = stream.collect(Collectors.toCollection(ArrayList::new)); //stream--->HashSet,toCollection 单独某一个集合 HashSet hashSet = stream.collect(Collectors.toCollection(HashSet::new)); //stream--->object[]数组 Object[] objects = stream.toArray(); //stream--->String[] String[] strings=stream.toArray(String[]::new);



