美文网首页
流式编程

流式编程

作者: 寂静的春天1988 | 来源:发表于2020-08-04 11:03 被阅读0次

日常使用

前言:依旧使用购物车的数据

/**
 * 演示流的各种操作
 * @author user
 *
 */
public class StreamOperator {
    List<Sku> list;
    
    @Before
    public void init() {
        list=CarService.getCartSkuList();
    }
    
    /**
     * 过滤操作
     */
    @Test
    public void filterTest() {
        list.stream()
            .filter(sku->sku.getSkCategory().equals(SkCategoryEnum.BOOKS))
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
            
    }
    
    /**
     * 转换操作
     */
    @Test
    public void mapTest() {
        list.stream()
            .map(sku-> sku.getSkuName())
            .forEach(item -> System.out.println(item));
    }
    
    
    /**
     * 将对象转换成流
     */
    @Test
    public void flatMapTest() {
        list.stream()
            .flatMap(sku->Arrays.stream(sku.getSkuName().split("")))
            .forEach(item -> System.out.println(item));
    }
    
    /**
     * 对流进行遍历操作,与forEach类似,但是是中间操作
     */
    @Test
    public void peek() {
        list.stream()
            .peek(sku->System.out.println(sku.getSkuName()))
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
    }
    
    /**
     * 排序操作
     */
    @Test
    public void sorted() {
        list.stream()
            .peek(sku->System.out.println(sku.getSkuName()))
            .sorted(Comparator.comparing(Sku::getTotalPrice))
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
    }
    
    /**
     * 去重
     */
    @Test
    public void distinctTest() {
        list.stream()
            .map(sku->sku.getSkCategory())
            .distinct()
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
    }
    
    /**
     * 跳过前n条数据
     */
    @Test
    public void skipTest() {
        list.stream()
            .sorted(Comparator.comparing(Sku::getTotalPrice))
            .skip(3)
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
    }
    
    /**
     * 截断前n条操作
     */
    @Test
    public void limitTest() {
        list.stream()
            .sorted(Comparator.comparing(Sku::getTotalPrice))
            .limit(3)
            .forEach(sku ->System.out.println(JSON.toJSONString(sku)));
    }
    
    //终端操作
    
    @Test
    public void allMatchTest() {
        // 判断所以商品总价是否都超过了100元
        boolean match=list.stream()
            .allMatch(sku->sku.getTotalPrice()>100);
        System.out.println(match);
    }
    

    @Test
    public void anyMatchTest() {
        // 有一个商品总价大于100返回ture
        boolean match=list.stream()
            .anyMatch(sku->sku.getTotalPrice()>100);
        System.out.println(match);
    }
    
    @Test
    public void noneMatchTest() {
        // 没有一个商品总价大于100返回ture
        boolean match=list.stream()
            .noneMatch(sku->sku.getTotalPrice()>100);
        System.out.println(match);
    }
    
    /**
     * 找第一个
     */
    @Test
    public void findFirstTest() {
        Optional<Sku> opSku =list.stream()
            .findFirst();
    }
    
    /**
     * 找任意一个
     */
    @Test
    public void findAnyTest() {
        Optional<Sku> opSku =list.stream()
                .findAny();
    }
    /**
     * 找最大
     */
    @Test
    public void maxTest() {
        
        OptionalDouble optionalDouble=list.stream()
            .mapToDouble(Sku::getTotalPrice)
            .max();
        System.out.println(optionalDouble.getAsDouble());
    }
    
    /**
     * 找最小
     */
    @Test
    public void minTest() {
        
        OptionalDouble optionalDouble=list.stream()
            .mapToDouble(Sku::getTotalPrice)
            .min();
        System.out.println(optionalDouble.getAsDouble());
    }
    
    /**
     * 统计
     */
    @Test
    public void countTest() {
        
        long count=list.stream()
            .count();
        System.out.println(count);
    }
}

生成流的方式

@Test
    public void streamFromValue() {
        Stream stream=Stream.of(1,2,3,4);
        stream.forEach(System.out::println);
    }
    
    @Test
    public void streamFromArray() {
        int[] nums= {1,2,3,4};
        IntStream stream=Arrays.stream(nums);
        stream.forEach(System.out::println);
    }
    
    @Test
    public void streamFromFile() throws IOException {
        Stream<String> stream=Files.lines(Paths.get("/common/src/main/java/com/fuiou/lambda/stream/StreamOperator.java"));
        stream.forEach(System.out::println);
    }
    
    
    @Test
    public void streamFromFunction() throws IOException {
        //Stream stream=Stream.iterate(0, n->n+2);
        Stream stream=Stream.generate(Math::random);
        stream
            .limit(100)
            .forEach(System.out::println);
    }

收集器

收集器:将流的元素累计成一个结果
比如:将筛选过的数据,收集成一个list

    /**
     * 收集成集合
     */
    @Test
    public void toList() {
        List<Sku> filterList=list.stream()
                  .filter(sku->sku.getTotalPrice()>100)
                  .collect(Collectors.toList());
        for (Sku sku2 : filterList) {
            System.out.println(sku2.getSkuName());
        }
    }
    
    /**
     * 分组
     */
    @Test
    public void groupingBy() {
        //Map<分组条件,结果集合>
        Map<Object,List<Sku>> map=list.stream()
                .collect(Collectors.groupingBy(sku->sku.getSkCategory()));
        System.out.println(map);
    }
    
    /**
     * 分区
     */
    @Test
    public void partition() {
        // 将数据分成总价>100和<=100的两组
        Map<Boolean,List<Sku>> map=list.stream()
                .collect(Collectors.partitioningBy(sku->sku.getTotalPrice()>100));
    }

相关文章

  • 流式编程

    日常使用 前言:依旧使用购物车的数据 生成流的方式 收集器 收集器:将流的元素累计成一个结果比如:将筛选过的数据,...

  • 流式编程

    创建流8种方法 1.创建空流 这个方法经常被用在创建一个不含元素的空的流进行返回,避免返回null 2.从集合中创...

  • Java核心教程5: 流式编程

    本次课程的标题不像之前那样易懂,是一个陌生的概念,“流式编程”是个什么东西? 在了解流式编程之前先思考一下“流”,...

  • 流式数据处理

    流式数据处理的应用场景,包括基本概念和处理方式;也介绍了流式处理系统常见的编程模型和框架,最后介绍了流式数据处理的...

  • 十二、从Camel中学习Flunt Api设计

    以下为我目前对流式编程的理解。 一、 流式的好处 更接近与自然语言; 操作连贯,一行搞定(如Builder); 二...

  • io流&流式编程

    跟C++的流有什么区别? 百度搜索(C++ java 流 stream)(理解java中的流) C++流的原理:可...

  • Spark流式编程介绍 - 编程模型

    来源Spark官方文档http://spark.apache.org/docs/latest/structured...

  • jdk8的Stream学习之创建流

    JDK8的流式编程来来回回走马观花也看了几遍了。工作中一般的集合类操作能用流式操作的也都用流式操作。今天正儿八经的...

  • Kotlin Flow 的基本用法

    Kotlin 的 Flow 用于流式编程。 Flow 基本使用 输出: Flow 生命周期 输出: Flow 发生...

  • RxJava原理解析

    rxJava的思维 响应式编程,卡片式编程,流式编程,有一个起点和一个终点,起点开始流向我们的“事件”, 把事件流...

网友评论

      本文标题:流式编程

      本文链接:https://www.haomeiwen.com/subject/nhtsrktx.html