JAVA stream流

3.Stream流


JDK1.8后出现的,用于解决集合和数组现有的弊端。
关注做什么而不是怎么做
stream并不存储元素,而是按需计算
两个特性:
1. pipelining(只能被消费一次)
2. 内部迭代

3.1 获取Stream

* 所有的Collection可以通过stream默认方法
* Stream接口的of方法
// 1.集合转换为Stream
list<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
Set<String> set = new HashSet<>();
Stream<String> stream2 = set.stream();
// 2.Map转换为Stream
Map<String,String> map = new HashMap<>();
Set<String> keySet = map.keySet();
Stream<String> stream3 = keySet.stream();
Collection<String> values = may.values();
Stream<String> stream4 = values.stream();
// 获取键值对的映射关系
Set<Map.Entry<String,String>> entries = may.entrySet();
Stream<Map.Entry<String,String>> stream5 = entries.stream();
// 数组转换为Stream流
Stream<Integer> stream6 = Stream.of(1,2,3,4);
Integer[] arr = {1,2,3,4};
Stream<Integer> stream7 = Stream.of(arr);

3.2 Stream流中常用的方法

* 延迟方法:返回值仍是Stream接口自身类型,支持链式编程
* 终结方法:返回值不再是Stream接口自身的类型,其后不支持链式,有两个:
	1. count
	2. forEach

3.2.1 forEach

void forEach(Consumer<? super T> action)
该方法接收一个Consumer接口,可以传递Lambad表达式来消费数据
终结方法,一般用来遍历数据

Stream<String> stream = Stream.of("zhangsan", "wamgwi", "jajaj");
stream.forEach((name)-> System.out.println(name)); // 被消费后关闭,不能再调用

3.2.2 filter

Stream<T> filter(Predicate<? super T> predicate)
可以将一个流转换为另一个子集流,接收一个Predicate函数式接口作为筛选条件
结果为true,filter方法会将元素留下;结果为false,元素将被舍去

Stream<String> stream1 = Stream.of("zhang", "wang", "zhang1", "ahhaha");
Stream<String> stream2 = stream1.filter((name) -> name.startsWith("zh"));

3.2.3 map

<R> Stream<R> map(Function<? super T,? extends R> mapper)
将流中的元素映射到另一个流中,接收一个Function函数接口

Stream<String> stream3 = Stream.of("1", "2", "3", "4");
Stream<Integer> stream4 = stream3.map((s) -> Integer.parseInt(s));
stream4.forEach(i-> System.out.println(i));  // 被消费后关闭,不能再调用

3.2.4 count

long count()
统计元素的个数,终结方法

ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
Stream<Integer> stream5 = list.stream();
long count = stream5.count();
System.out.println(count);

3.2.5 limit

Stream<T> limit(long maxSize)
对流进行截取,只取前n个

3.2.6 skip

Stream<T> skip(long skipnum)
跳过前n个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值