zoukankan      html  css  js  c++  java
  • lambda表达式——流的各种常见操作总结(排序,过滤,去重,分页等)

    流的各种操作总结

    过滤集合(filter)

        /**
         * filter使用:过滤掉不符合断言判断的数据
         */
        public void filterTest() {
            list.stream()
    
                    // filter
                    .filter(sku ->
                            SkuCategoryEnum.BOOKS
                                    .equals(sku.getSkuCategory()))
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
        }
    
    

    将一个元素转换成另一个元素(map)

        /**
         * map使用:将一个元素转换成另一个元素
         */
        @Test
        public void mapTest() {
            list.stream()
    
                    // map
                    .map(sku -> sku.getSkuName())
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
        }
    

    对流中元素进行排序(sort)

    /**
         * sort使用:对流中元素进行排序,可选则自然排序或指定排序规则。有状态操作
         */
        @Test
        public void sortTest() {
            list.stream()
    
                    .peek(sku -> System.out.println(sku.getSkuName()))
    
                    //sort
                    .sorted(Comparator.comparing(Sku::getTotalPrice))
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
        }
    

    对流元素进行去重(distinct)

     public void distinctTest() {
            list.stream()
                    .map(sku -> sku.getSkuCategory())
    
                    // distinct
                    .distinct()
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
    
    
        }
    

    跳过前N条记录(skip),可以作为假分页

     /**
         * skip使用:跳过前N条记录。有状态操作
         */
        @Test
        public void skipTest() {
            list.stream()
    
                    .sorted(Comparator.comparing(Sku::getTotalPrice))
    
                    // skip
                    .skip(3)
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
        }
    

    截断前N条记录(limit),可以作为假分页

     /**
         * limit使用:截断前N条记录。有状态操作
         */
        @Test
        public void limitTest() {
            list.stream()
                    .sorted(Comparator.comparing(Sku::getTotalPrice))
    
                    .skip(2 * 3)
    
                    // limit
                    .limit(3)
    
                    .forEach(item ->
                            System.out.println(
                                    JSON.toJSONString(
                                            item, true)));
        }
    

    找到最大的元素

        /**
         * max使用:
         */
        @Test
        public void maxTest() {
            OptionalDouble optionalDouble = list.stream()
                    // 获取总价
                    .mapToDouble(Sku::getTotalPrice)
    
                    .max();
    
            System.out.println(optionalDouble.getAsDouble());
        }
    

    找到最小的元素

        /**
         * min使用
         */
        @Test
        public void minTest() {
            OptionalDouble optionalDouble = list.stream()
                    // 获取总价
                    .mapToDouble(Sku::getTotalPrice)
    
                    .min();
    
            System.out.println(optionalDouble.getAsDouble());
        }
    

    元素匹配三剑客(allMatch,anyMatch,noneMatch)

     /**
         * allMatch使用:终端操作,短路操作。所有元素匹配,返回true
         */
        @Test
        public void allMatchTest() {
            boolean match = list.stream()
    
                    .peek(sku -> System.out.println(sku.getSkuName()))
    
                    // allMatch
                    .allMatch(sku -> sku.getTotalPrice() > 100);
    
            System.out.println(match);
        }
    
        /**
         * anyMatch使用:任何元素匹配,返回true
         */
        @Test
        public void anyMatchTest() {
            boolean match = list.stream()
    
                    .peek(sku -> System.out.println(sku.getSkuName()))
    
                    // anyMatch
                    .anyMatch(sku -> sku.getTotalPrice() > 100);
    
            System.out.println(match);
        }
    
        /**
         * noneMatch使用:任何元素都不匹配,返回true
         */
        @Test
        public void noneMatchTest() {
            boolean match = list.stream()
    
                    .peek(sku -> System.out.println(sku.getSkuName()))
    
                    // noneMatch
                    .noneMatch(sku -> sku.getTotalPrice() > 10_000);
    
            System.out.println(match);
        }
    
  • 相关阅读:
    Kruskal重构树学习笔记
    亚洲和欧洲的分界线是谁划分的?
    代码目录 (App_Code 目录)及namespace的理解
    Events解惑——来自MSDN
    HttpContext.Current.Response和Response有什么区别?
    Ramdisk 内存盘的使用
    MVC模式 介绍
    关于Windows Workflow Foundation 调试时的经验小解(不断添加)
    关于类成员变量的声明和实例化的时机
    软件名称备份
  • 原文地址:https://www.cnblogs.com/xiaodou00/p/14707647.html
Copyright © 2011-2022 走看看