Java8新增stream流

 一、stream简介

stream流是Java8新增的特性,配合lambda表达式,为我们操作集合(Collection)提供了极大的便利,stream将要处理的元素集合看成是一种流,在流的过程中,借助stream API 进行筛选、排序、聚合等操作。

二、stream创建

stream可以由数组和集合创建,主要的创建方式有以下几种:

1、通过List集合创建

//创建一个list集合
List<String> list  = new ArrayList<>();
//通过list集合创建stream流
Stream<String> listStream = list.stream();

2、通过Set集合创建

//创建一个set集合
Set<Integer> set = new HashSet<>();
//通过set集合创建流
Stream<Integer> setStream = set.stream();

3、通过Map集合创建

Map集合不可以直接创建Stream流,可以间接创建Stream流

1)通过keySet间接创建

//创建一个map集合
Map<Integer,String> map = new HashMap<>();
//通过map集合的keySet创建流
Stream<Integer> mapStream = map.keySet().stream();

2)通过values间接创建

//创建一个Map集合
Map<Integer,String> map = new HashMap<>();
//通过values创建stream流
Stream<String> mapStream = map.values().stream();

3)通过EntrySet创建

//创建一个Map集合
Map<Integer,String> map = new HashMap<>();
//通过entrySet创建stream流
Set<Map.Entry<Integer,String>> mapStream = map.entrySet().stream();

4、通过数组创建

//创建一个数组
String[] array = {"hello","world","java"};
Stream<String> arrayStream = Stream.of(array);

三、stream流中间操作

1、filter过滤

//创建一个List集合
  ArrayList<String> list = new ArrayList<>();
  list.add("林青霞");
  list.add("张曼玉");
  list.add("王祖贤");
  list.add("柳岩");
  list.add("张敏");
  list.add("张无忌");
//使用stream流筛选出以张开头的元素
 /* list.stream().filter((String s) -> {
        return s.startsWith("张");
    }).forEach(System.out::println); */
//简化写法
  list.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);

2、limit、skip

//创建一个List集合
        ArrayList<String> list = new ArrayList<>();
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
//取前三个元素
        list.stream().limit(3).forEach(System.out::println);
//跳过前三个元素,在剩下的元素中取前2个元素
        list.stream().skip(3).limit(2).forEach(System.out::println);

3、contact、distinct

distinct会根据equal()的比较结果去重

//创建一个List集合
        ArrayList<String> list = new ArrayList<>();
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
//取前四个元素组成一个流
        Stream<String> s1 = list.stream().limit(4);
//跳过两个元素组成一个流
        Stream<String> s2 = list.stream().skip(2);
//将以上两个流合并成一个
        Stream.contract(s1,s2).forEach(System.out::println);
//将以上两个流合并成一并去重
        Stream.contract(s1,s2).distinct().forEach(System.out::println);

4、sorted排序

//创建一个List集合
        ArrayList<String> list = new ArrayList<>();
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
//将流中的元素自然排序
        list.stream().sorted().forEach(System.out::println);
//将流中的元素按长度由小到大排序
        list.stream().sorted((s1,s2) -> s1.length() - s2.length()).forEach(System.out.println);

四、流终结操作

1、Collection

//创建一个List集合
        ArrayList<String> list = new ArrayList<>();
        list.add("林青霞");
        list.add("张曼玉");
        list.add("王祖贤");
        list.add("柳岩");
        list.add("张敏");
        list.add("张无忌");
        //将流收集到List中
        List<String> collect = list.stream().collect(Collectors.toList());
        //将流收集到Set中
        Set<String> set = list.stream().collect(Collectors.toSet());
        //将流收集到Map中
        Map<String, String> map = list.stream().collect(Collectors.toMap( s->s,s -> s.substring(1,2)));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值