Java基础Stream流的终止操作(allMatch,findFirst,count,max,forEach),归约,收集

2022-02-11 08:14:01
packageTest10;importorg.junit.Test;importjava.util.Arrays;importjava.util.List;importjava.util.Optional;importjava.util.stream.Stream;/**
 * 功能描述:Stream流的终止操作
 * @version 1.0
 * @className Test1007
 * @author: 罗德
 * @create: 2020-10-07 15:25
 */publicclassTest1007{/**
     * 功能描述:
     * sream终止操作之allMatch()
     * 所有元素是否满足给定的条件
     * 方法参数描述:无
     */@Testpublicvoidtest1(){List<Integer> list=Arrays.asList(5,4,3,2,1,0);Stream<Integer> stream= list.stream();/**
         * public abstract boolean allMatch
         * (java.util.function.Predicate<? super T> predicate)
         * 返回此流的所有元素是否与提供的谓词匹配。如果不需要确定结果,则不能对所有元素求值谓词。
         * 如果流为空,则返回true,不计算谓词。 这是短路终端操作。
         */boolean allMatch= stream.allMatch(integer-> integer>1);System.out.println(list);//[5, 4, 3, 2, 1, 0]System.out.println(allMatch);//false}/**
     * 功能描述:
     * sream终止操作之anyMatch()
     * 至少有一个元素,是否满足给定的条件
     * 方法参数描述:无
     */@Testpublicvoidtest2(){List<String> list=Arrays.asList("a","ab","bc","cd");Stream<String> stream= list.stream();/**
         * public abstract boolean anyMatch
         * (java.util.function.Predicate<? super T> predicate)
         * 返回此流的任何元素是否与提供的谓词匹配。如果不需要确定结果,则不能对所有元素求值谓词。
         * 如果流为空,则返回false,并且不计算谓词。 这是短路终端操作。
         */boolean anyMatch= stream.anyMatch(s-> s.contains("a"));System.out.println(list);//[a, ab, bc, cd]System.out.println(anyMatch);//true}/**
     * 功能描述:
     * sream终止操作之noneMatch()
     * 没有元素满足给定的条件
     * 方法参数描述:无
     */@Testpublicvoidtest3(){List<String> list=Arrays.asList("a","ab","bc","cd");Stream<String> stream= list.stream();/**
         * public abstract boolean noneMatch
         * (java.util.function.Predicate<? super T> predicate)
         * 返回此流中是否没有与提供的谓词匹配的元素。如果不需要确定结果,则不能对所有元素求值谓词。
         * 如果流为空,则返回true,不计算谓词。 这是短路终端操作。
         */boolean noneMatch= stream.noneMatch(s-> s.contains("m"));System.out.println(list);//[a, ab, bc, cd]System.out.println(noneMatch);//true}/**
     * 功能描述:
     * sream终止操作之findFirst()/findAny
     * 回描述此流的第一个元素的可选值/任意一个
     * 方法参数描述:无
     */@Testpublicvoidtest4(){List<String> list=Arrays.asList("a","ab","bc","cd");Stream<String> stream= list.stream();/**
         * public abstract java.util.Optional<T> findFirst()
         * 返回描述此流的第一个元素的可选值,如果流为空,则返回空的可选值。
         * 如果流没有遇到顺序,则可以返回任何元素。 这是短路终端操作。
         */Optional<String> first= stream.findFirst();//Optional<String> any = stream.findAny();//任意一个System.out.println(list);//[a, ab, bc, cd]System.out.println(first);//Optional[a]}/**
     * 功能描述:sream终止操作之count/max/forEach
     * count():返回此流中元素的计数。
     * max():根据提供的比较器返回此流的最大元素
     * forEach():对此流的每个元素执行操作。
     * 方法参数描述:无
     */@Testpublicvoidtest5(){List<String> list=Arrays.asList("a","ab","bc","cd");Stream<String> stream= list.stream();System.out.println(stream.count());//4System.out.println(list.stream().max((o1, o2)-> o1.compareTo(o2)));//Optional[cd]
        list.stream().forEach(System.out::print);//aabbccdSystem.out.println("外部迭代");
        list.forEach(System.out::print);//aabbccd}/**
     * 功能描述:sream终止操作之归约(计算-如求和)
     * reduce():使用函数对元素进行操作,如累加,返回一个值
     * 方法参数描述:无
     */@Testpublicvoidtest6(){List<Integer> list=Arrays.asList(5,4,3,2,1,0);Stream<Integer> stream= list.stream();/**
         * public abstract java.util.Optional<T> reduce
         * (java.util.function.BinaryOperator<T> accumulator)
         * 使用关联累加函数对该流的元素执行缩减,并返回一个可选的描述减少值(如果有)。
         * 这是终端操作。
         */Optional<Integer> reduce= stream.reduce(Integer::max);System.out.println(list);//[5, 4, 3, 2, 1, 0]System.out.println(reduce);//Optional[5]Stream<Integer> stream1= list.stream();Optional<Integer> reduce1= stream1.reduce(Integer::sum);System.out.println(reduce1);//Optional[15]}/**
     * 功能描述:sream终止操作之收集collect
     * 使用集合工具的方法来处理stream流,返回一个集合(List,Set)
     * 方法参数描述:无
     */@Testpublicvoidtest7(){List<Integer> list=Arrays.asList(5,4,3,2,1,0);Stream<Integer> stream= list.stream();/**
         * public abstract <R, A> R collect
         * (java.util.stream.Collector<? super T, A, R> collector)
         * 使用收集器对此流的元素执行可变的缩减操作。这是终端操作
         */List<Integer> collect= stream.collect(Collectors.toList());System.out.println(collect);//[5, 4, 3, 2, 1, 0]Set<Integer> collect1= list.stream().collect(Collectors.toSet());System.out.println(collect1);//[0, 1, 2, 3, 4, 5]}}
  • 作者:欧皇小德子
  • 原文链接:https://blog.csdn.net/rod0320/article/details/108952750
    更新时间:2022-02-11 08:14:01