[Java]Stream流

在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念,用于简化集合和数组操作的API。

Stream流的三类方法:

集合获取Stream流的方式:可以用Collection接口中的默认方法stream()生成Stream流:

数组获取Stream流的方式:

 

System.out.println("Collection集合获取Stream流");
Collection<String> list = new ArrayList<>();
Stream<String> s = list.stream();

System.out.println("Map集合获取流");
Map<String,Integer> maps = new HashMap<>();
//键流
Stream<String> keyStream = maps.keySet().stream();
//值流
Stream<Integer> valueStream = maps.values().stream();
//键流类(拿整体)
Stream<Map.Entry<String,Integer>> keyAndValueStream = maps.entrySet().stream();

System.out.println("数组获取Stream流");
String[] names = {"12","13","14","15"};
Stream<String> nameStream = Arrays.stream(names);
//还有一种写法
Stream<String> nameStream2 = Stream.of(names);

Stream流常用API:

//Stream流常用API
//Stream支持链式编程
list2.stream().filter(s1->s1.startsWith("1")).forEach(s1->System.out.println(s1));
//到了foreach没有返回值了,流结束
//s代表每一个元素
long size = list2.stream().filter(s1->s1.length()==3).count();
System.out.println(size);
//根据提示知count的返回值为long
list2.stream().filter(s1->s1.startsWith("1")).limit(2).forEach(s1->System.out.println(s1));
//1开头的,只要前两个
//"forEach(s1->System.out.println(s1))"中两处s1是一样的,可简化为方法引用:
list2.stream().filter(s1->s1.startsWith("1")).limit(2).forEach(System.out::println);
list2.stream().skip(2).forEach(System.out::println);
//Map加工方法
//给集合元素前面都加上一个'n'
list2.stream().map(s1->"n"+s1).forEach(System.out::println);
//把所有名称都加工成学生类对象
list2.stream().map(s1->new Student(s1)).forEach(s1->System.out.println(s1));
//两处s1是一样的,可构造器引用 方法引用
list2.stream().map(Student::new).forEach(System.out::println);
//合并流
Stream<String> st1 = list2.stream().filter(s1->s1.startsWith("1"));
Stream<String> st2 = Stream.of("java1","java2");
Stream<String> st3 = Stream.concat(st1,st2);//只能合并两个
st3.forEach(s1 -> System.out.println(s1));

注意:Stream流无法修改集合数组中的数据

Stream流常见终结操作方法:

Stream收集操作:

把Stream流操作后的结果数据转回到集合或数组中去 。

Stream流收集方法:

 Collectors工具类提供了具体收集方式:

Stream<String> s3 = list2.stream().filter(s1->s1.startsWith("1"));//过滤完之后的结果还是stream流,定义一个stream流的变量来接
//收集到list集合中
List<String> onelists = s3.collect(Collectors.toList());//tolist:告诉collector方法以list形式收集元素
System.out.println(onelists);

Stream<String> s4 = list2.stream().filter(s1->s1.startsWith("1"));
Set<String> onelists1 = s4.collect(Collectors.toSet());//前面应该再定义一条stream流
//会去掉重复的
System.out.println(onelists1);

Stream<String> s5 =list2.stream().filter(s1->s1.startsWith("1"));
s5.toArray();//收集成数组
System.out.println(Arrays.toString(arrs));

注意:流只能使用一次,里面数据被收集走后,里面没有数据了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值