聊一聊Java中的Steam流
来源 | OSCHINA 社区
作者 | 京东云开发者-京东物流 王辰玮
原文链接:https://my.oschina.net/u/4090830/blog/10087460
1 引言
2 流简介
2.1 支持数据处理操作
2.2 源
List<Integer> list = Arrays.asList(111,222,333);
Stream<Integer> stream = list.stream();
一种是由数组创建流:
IntStream stream = Arrays.stream(new int(){111,222,333});
一种是由静态方法 Stream.of () 创建流,底层还是 Arrays.stream ():
Stream<Integer> stream = Stream.of(111, 222, 333);
还有两种特殊的流:
空流:Stream.empty ()
无限流:Stream.genarate ()
2.3 元素序列
3 流的思想
public class Goods {
private final String Name;
private final Integer Volume;
public Goods(String name, Integer volume) {
Name = name;
Volume = volume;
}
public String getName() {
return Name;
}
public Integer getVolume() {
return Volume;
}
}
接下来是商品集合的定义:
List<Goods> goods = Arrays.asList(new Goods("土豆",10),
new Goods("冰箱",900),new Goods("办公椅",300));
接下来获取我们想要的结果:
List<String> twofoods = goods.stream()//获取流
.filter(goods1 -> goods1.getVolume()>200)//筛选商品体积大于200的
.map(Goods::getName)//获取商品名称
.limit(2)//筛选头两个商品
.collect(Collectors.toList());//将结果保存在list中
4 流处理的特性
不存储数据
不会改变数据源
只可被使用一次
import org.springframework.util.Assert;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamCharacteristic {
public void test1(){
List<Integer> list = Arrays.asList(1,2,2,5,6,9);
list.stream().distinct();
System.out.println(list.size());
}
public void test2(){
List<String> list = Arrays.asList("wms", "KA", "5.0");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
stream.forEach(System.out::println);
}
}
5 流操作与流的使用
StreamAPI 常用的中间操作有:filter,map,limit,sorted,distinct。
6 总结
流是从支持数据处理操作的源生成的元素序列
流的思想类似于生产中的流水线
流不存储数据,不改变数据源,只能被改变一次
流的操作主要分为中间操作和终端操作两大类
往期推荐
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦
微信扫码关注该文公众号作者
戳这里提交新闻线索和高质量文章给我们。
来源: qq
点击查看作者最近其他文章