Java基础 -> Stream的中间操作(截断limit,跳过skip,不重复distinct,排序sorted)


    /**
     * 功能描述:stream的中间操作
     * 方法参数描述:无
     */
    @Test
    public void test4() {
        System.out.println('\n' + "limit方法");
        List<Integer> asList = Arrays.asList(5,4,3,2,1,0);
        Stream<Integer> stream = asList.stream();
        /**
         * public abstract Stream<T> limit(long maxSize)
         * 返回由此流的元素组成的流,截断后的长度不超过maxSize。 这是一个短路有状态的中间操作。
         */
        stream.limit(3).forEach(System.out::print);//543

        System.out.println('\n' + "map方法");
        /**
         * public abstract <R> Stream<R> map
         * (java.util.function.Function<? super T, ? extends R> mapper)
         * 返回由将给定函数应用于此流的元素的结果组成的流。 这是一个中间操作。
         */
        Stream<Integer> stream1 = asList.stream();
        stream1.map(s -> s > 1).forEach(System.out::print);//truetruetruetruefalsefalse

        System.out.println('\n' + "下面是filter方法");
        /**
         * public abstract Stream<T> filter
         * (java.util.function.Predicate<? super T> predicate)
         * 返回由与给定谓词匹配的此流的元素组成的流。 这是一个中间操作。
         */
        Stream<Integer> stream2 = asList.stream();
        Stream<Integer> Stream2 = stream2.filter(Integer -> Integer > 2);
        Stream2.forEach(System.out::print);//543

        System.out.println('\n' + "下面是skip方法");
        Stream<Integer> stream3 = asList.stream();
        /**
         * public abstract Stream<T> skip(long n)
         * 在丢弃流的前n个元素后,返回由该流的其余元素组成的流。如果此流包含少于n个元素,则将返回空流。
         * 这是一个有状态的中间操作。
         */
        stream3.skip(5).forEach(System.out::print);//0

        System.out.println('\n' + "下面是distinct方法");
        Stream<Integer> stream4 = asList.stream();
        /**
         * public abstract Stream<T> distinct()
         * 返回由不同元素组成的流(根据对象.等于(Object)这个流的。
         * 对于有序流,不同元素的选择是稳定的(对于重复的元素,保留在遇到顺序中第一个出现的元素);
         * 对于无序流,不提供稳定性保证。 这是一个有状态的中间操作。
         */
        stream4.distinct().forEach(System.out::print);//543210

        System.out.println('\n' + "下面是flatMap方法");
        Stream<Integer> stream5 = asList.stream();
        /**
         * public abstract <R> Stream<R> flatMap
         * (java.util.function.Function<? super T, ? extendsStream<? extends R>> mapper)
         * 返回一个流,该流由将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果组成。
         * 在将每个映射流的内容放入此流后,将关闭每个映射流。(如果映射流为空,则使用空流。)
         * 这是一个中间操作。
         */
        stream5.flatMap(Test1006::getStream).forEach(System.out::print);//543210
    }

    public static Stream<Integer> getStream(int i) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(i);
        return arrayList.stream();
    }
    /**
     * 功能描述:Stream中间操作之排序
     * 方法参数描述:无
     */
    @Test
    public void test5() {
        List<Integer> asList = Arrays.asList(5,4,3,2,1,0);
        /** 
         * public abstract Stream<T> sorted()
         * 返回由此流的元素组成的流,按自然顺序排序。如果此流的元素不可比较,
         * 则java.lang.ClassCastException可能在执行终端操作时引发。 
         * 对于有序流,排序是稳定的。对于无序流,不提供稳定性保证。 这是一个有状态的中间操作。
         */ 
        asList.stream().sorted().forEach(System.out::print);//012345
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,以下是一些 Java 8 Stream API 常用方法的代码例子: 1. filter: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); 2. map: List<String> words = Arrays.asList("hello", "world"); List<Integer> wordLengths = words.stream() .map(String::length) .collect(Collectors.toList()); 3. flatMap: List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6)); List<Integer> flattenedNumbers = numbers.stream() .flatMap(List::stream) .collect(Collectors.toList()); 4. distinct: List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 4, 5, 3); List<Integer> distinctNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); 5. sorted: List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5); List<Integer> sortedNumbers = numbers.stream() .sorted() .collect(Collectors.toList()); 6. peek: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> doubledNumbers = numbers.stream() .peek(n -> System.out.println("Doubling " + n)) .map(n -> n * 2) .collect(Collectors.toList()); 7. limit: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> limitedNumbers = numbers.stream() .limit(3) .collect(Collectors.toList()); 8. skip: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> skippedNumbers = numbers.stream() .skip(2) .collect(Collectors.toList()); 9. reduce: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .reduce(0, Integer::sum); 10. collect: List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); List<Integer> collectedNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值