4.从流中获取结果(流的终结)

在对一个集合通过流处理完后,我们需要回去流处理的结果,这时我们就可以使用一系列方法进行获取。
注意:使用终结方法后,这个流将关闭,不允许再被使用。

代码就是最好的学习方式,下面请看代码:

package StreamStudy.Exa04;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 流的终结:从流中获取结果集
 * 涉及的API:count,max,min,collect,findFirst,findAny,anyMatch,allMatch,noneMatch
 */
public class StreamEnd {
    public static void main(String[] args) {
        String content="hello world wo cao ni ma ma ni wo";
        String[] contents=content.split("\\PL+");
        Stream<String> words= Stream.of(contents);
        //如何从流数据中获得的答案,流的约简是方式之一,约简就是获得流里数据集的统计级别的信息
        //获取流中的元素个数
        long count=words.count();
        System.out.println("流words中元素个数为:"+count);

        //获得流中最大值和最小值  compareToIgnoreCase() 方法用于按字典顺序比较两个字符串,不考虑大小写
        Optional<String> max=Stream.of(contents).max(String::compareToIgnoreCase);
        System.out.println(max.get());
        Optional<String> min=Stream.of(contents).min(String::compareToIgnoreCase);
        System.out.println(min.get());


        //Optional类型是一种更好的表示缺少返回值的方式,它是一种包装器对象,要么包装了类型T的对象,要么没有包装任何对象
        //有效的使用Optional的关键是要使用这样一个方法:它在值不存在的情况下会产生一个可替代物
        Optional<String> test=Stream.of(contents).filter(s->s.length()<1).findFirst();
        String result=test.orElse("我是替代字符串");
        System.out.println(result);
        //我们还可以调用代码来计算默认值
        String result2=test.orElseGet(()-> Locale.getDefault().getDisplayName());
        System.out.println(result2);
        //我们还可以在没有任何值的情况下抛出异常
        //String result3=test.orElseThrow(IllegalAccessError::new);

        //有效使用Optional的另一种方法是只有在其存在的情况下才消费该值
        List<String> result4=new ArrayList<>();
        test.ifPresent(result4::add);
        System.out.println(result4.size());

        //如果我们想要获得流中随机的一个元素我们可以使用findAny元素
        Optional<String> findAny=Stream.of(contents).findAny();
        System.out.println(findAny);

        //如果我们想要提取流中的元素组成列表我们可以
        List<String> list=Stream.of(contents).collect(Collectors.toList());

        //如果只想知道是否存在匹配的值,可以使用anyMatch
        boolean flag=Stream.of(contents).anyMatch(s->s.equals("hello"));
        System.out.println(flag);
        //如果想知道是否所有元素都满足某个条件可以使用allMatch
        flag=Stream.of(contents).allMatch(s->s.equals("hello"));
        System.out.println(flag);
        flag=Stream.of(contents).noneMatch(s->s.equals("000"));
        System.out.println(flag);

    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值