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

package Test10;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

/**
 * 功能描述:Stream流的终止操作
 * @version 1.0
 * @className Test1007
 * @author: 罗德
 * @create: 2020-10-07 15:25
 */
public class Test1007 {
    /**
     * 功能描述:
     * sream终止操作之allMatch()
     * 所有元素是否满足给定的条件
     * 方法参数描述:无
     */
    @Test
    public void test1() {
        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()
     * 至少有一个元素,是否满足给定的条件
     * 方法参数描述:无
     */
    @Test
    public void test2() {
        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()
     * 没有元素满足给定的条件
     * 方法参数描述:无
     */
    @Test
    public void test3() {
        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
     * 回描述此流的第一个元素的可选值/任意一个
     * 方法参数描述:无
     */
    @Test
    public void test4() {
        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():对此流的每个元素执行操作。
     * 方法参数描述:无
     */
    @Test
    public void test5() {
        List<String> list = Arrays.asList("a", "ab", "bc", "cd");
        Stream<String> stream = list.stream();
        System.out.println(stream.count());//4
        System.out.println(list.stream().max((o1, o2) -> o1.compareTo(o2)));//Optional[cd]
        list.stream().forEach(System.out::print);//aabbccd
        System.out.println("外部迭代");
        list.forEach(System.out::print);//aabbccd
    }
    
    /**
     * 功能描述:sream终止操作之归约(计算-如求和)
     * reduce():使用函数对元素进行操作,如累加,返回一个值
     * 方法参数描述:无
     */
    @Test
    public void test6() {
        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)
     * 方法参数描述:无
     */
    @Test
    public void test7() {
        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]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值