Java 8-Stream详解

Stream使用实际就是把

  1. 集合对象转换为stream对象
  2. 对stream对象进行过滤筛选等操作
  3. 筛选后的结果又转换为集合,或者返回统计结果

串行:.stream()
并行:.parallelStream()

1. 集合转换为Stream对象

  • collection集合转换成stream对象
list.stream()
set.stream()
  • 数组转换成stream对象
Stream.of(String)

2. Stream中常用的方法

过滤相关
  1. filter()方法

    过滤,箭头后面跟着的是一个boolean值,可以写任何的过滤条件,就相当于sql中where后面的东西,能用sql实现的功能这里都可以实现
    List<User> filterList = list.stream().filter(user -> user.getSex() == 1)
    	.collect(toList());
    
  2. sored()方法

    对年龄进行排序
    List<User> sortedList = list.stream().sorted(Comparator.comparingInt(User::getAge))
        .collect(toList());
    
  3. limit(n)方法

    返回前n个元素
  4. skip(n)方法

    去除前n个元素,返回后面的元素
  5. distinct()方法

    去重
    //map(T->R)
    List<String> cityList = list.stream().map(User::getAddress).distinct().collect(toList());
    
查找相关
  1. findFirst()方法

    查找第一个元素
  2. findAny()方法

    查找任意一个元素
  3. allMatch()方法

    是否所有都满足条件,返回boolean
    都是男生返回true
    list.stream().allMatch(user -> user.getSex() == 1);
    
  4. noneMatch()方法

    是否所有都不满足条件,返回boolean
    都不是男生返回true
    list.stream().noneMatch(user -> user.getSex() == 1);
    
  5. anyMatch()方法

    是否存在满足条件的,返回boolean
    有男生返回true
    list.stream().anyMatch(user -> user.getSex() == 1);
    
映射相关
  1. flatMap方法

    将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流。

    //flatMap(T -> Stream<R>)
    List<String> flatList = new ArrayList<>();
    flatList.add("唱,跳");
    flatList.add("rape,篮球,music");
    flatList = flatList.stream().map(s -> s.split(",")).flatMap(Arrays::stream).collect(toList());
    
  2. map方法

    map是将T类型的数据转为R类型的数据

    //map(T->R)
    List<String> list = list.stream().map(User::getName).distinct().collect(toList());
    
统计相关
  1. count方法

    返回统计的数量
  2. max方法

    返回最大值
    Optional<User> max = users.stream().max(Comparator.comparingInt(User::getAge));
    
  3. min方法

    返回最小值
    Optional<User> max = users.stream().min(Comparator.comparingInt(User::getAge));
    
遍历相关
  1. forEach方法

     list.stream().forEach(item -> {
    		System.out.println("item="+item);
    	});
    
  2. forEachOrdered方法

    和forEach主要的区别在并行流的处理上
    forEach输出的顺序不一定(效率更高)
    forEachOrdered输出的顺序与元素的顺序严格一致

3. Stream转换为集合

  • stream转换为list集合
stream对象.collect(Collectors.toList())
  • stream转换为set集合
stream对象.collect(Collectors.toSet())
  • stream转换为数组
stream对象.toArray(Integer[]::new)

参考:https://segmentfault.com/a/1190000019574204#articleHeader5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值