高效 告别996,开启java高效编程之门 3-7实战:常用中间操作演示之:过滤/映射/扁平化 filter/map/flagMap

1    重点

filter方法的使用

map方法的使用

flatMap方法的使用

forEach方法的使用

2    map和flatMap的区别:

map的作用很容易理解就是对rdd之中的元素进行逐一进行函数操作映射为另外一个rdd。

flatMap的操作是将函数应用于rdd之中的每一个元素,将返回的迭代器的所有内容构成新的rdd。通常用来切分单词,可用来单词计数

3    实战演示之过滤(filter):
package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSONObject;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

/**
 * StreamOperator
 * 作用:演示各种流的操作
 * @author 魏豆豆
 * @date 2020/4/11
 */
public class StreamOperator {

    private List<Sku> list;
    /**
     * 初始化购物车车
     */
    @Before
    public void init(){
        list = CartService.getSkuList();
    }

    /**
     * filter的方法使用
     *
     * 过滤出只有书籍的商品并进行打印
     */
    @Test
    public void filterTest(){
        list.stream()
                //filter方法:如果条件为true则保留,否则过滤掉
                .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

}

打印日志:

{
    "skuCategory":"BOOKS",
    "skuId":2020003,
    "skuName":"人生的枷锁",
    "skuPrice":30.0,
    "totalNum":1,
    "totalPrice":30.0
}
{
    "skuCategory":"BOOKS",
    "skuId":2020004,
    "skuName":"老人与海",
    "skuPrice":20.0,
    "totalNum":1,
    "totalPrice":20.0
}
{
    "skuCategory":"BOOKS",
    "skuId":2020005,
    "skuName":"剑指高效编程",
    "skuPrice":288.0,
    "totalNum":1,
    "totalPrice":288.0
}

Process finished with exit code 0
4    实战演示之映射(map):
package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSONObject;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

/**
 * StreamOperator
 * 作用:演示各种流的操作
 * @author 魏豆豆
 * @date 2020/4/11
 */
public class StreamOperator {

    private List<Sku> list;
    /**
     * 初始化购物车车
     */
    @Before
    public void init(){
        list = CartService.getSkuList();
    }
/**
     * map方法的使用
     *
     * 找出购物车中所有商品的名称并进行打印
     */
    @Test
    public void mapTest(){
        list.stream()
                .map(sku -> sku.getSkuName())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

}

打印日志:

"无人机"
"T-shirt"
"人生的枷锁"
"老人与海"
"剑指高效编程"
"大头皮鞋"
"杠铃"
"ThinkPad"

Process finished with exit code 0
5    实战演示之扁平化(filterMap):
package com.imooc.zhangxiaoxi.stream;

import com.alibaba.fastjson.JSONObject;
import com.imooc.zhangxiaoxi.lambda.cart.CartService;
import com.imooc.zhangxiaoxi.lambda.cart.Sku;
import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;

/**
 * StreamOperator
 * 作用:演示各种流的操作
 * @author 魏豆豆
 * @date 2020/4/11
 */
public class StreamOperator {

    private List<Sku> list;
    /**
     * 初始化购物车车
     */
    @Before
    public void init(){
        list = CartService.getSkuList();
    }

    /**
     * filter的方法使用
     *
     * 过滤出只有书籍的商品并进行打印
     */
    @Test
    public void filterTest(){
        list.stream()
                //filter方法:如果条件为true则保留,否则过滤掉
                .filter(sku -> sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS))
                //item(可以是其他变量):为该流的每个元素执行一个操作
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * map方法的使用
     *
     * 找出购物车中所有商品的名称并进行打印
     */
    @Test
    public void mapTest(){
        list.stream()
                .map(sku -> sku.getSkuName())
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

    /**
     * flatMap方法的使用:将一个对象转换成一个流
     *
     * 找出购物车所有的商品名称并进行打印
     */
    @Test
    public void flatMap(){
        list.stream()
                //注意:flatMap是对源处理为Stream流之后才能继续操作
                .flatMap(sku -> Arrays.stream(sku.getSkuName().split("")))
                .forEach(item->System.out.println(JSONObject.toJSONString(item,true)));
    }

}

打印日志:

"无"
"人"
"机"
"T"
"-"
"s"
"h"
"i"
"r"
"t"
"人"
"生"
"的"
"枷"
"锁"
"老"
"人"
"与"
"海"
"剑"
"指"
"高"
"效"
"编"
"程"
"大"
"头"
"皮"
"鞋"
"杠"
"铃"
"T"
"h"
"i"
"n"
"k"
"P"
"a"
"d"

Process finished with exit code 0

原文地址:https://www.cnblogs.com/1446358788-qq/p/12678718.html

时间: 2024-11-07 14:31:18

高效 告别996,开启java高效编程之门 3-7实战:常用中间操作演示之:过滤/映射/扁平化 filter/map/flagMap的相关文章

高效 告别996,开启java高效编程之门 3-2传统方式处理业务逻辑

1 重点 1.1 对sort方法使用的理解 2 代码演练 需求: 根据第一章需求,女盆友提出需求* 1 打印所有商品* 2 图书类的商品一定给买* 3 最贵的买两件* 4 打印最贵的两件商品的名称和总价 测试类: package com.imooc.zhangxiaoxi.stream; import com.alibaba.fastjson.JSON; import com.imooc.zhangxiaoxi.lambda.cart.CartService; import com.imooc.

高效 告别996,开启java高效编程之门 2-8实战:判断逻辑参数化-Lambda表达式

0 有用部分 1    函数式编程简介 2    函数式编程和lambda的关系 3    lambda表达式应用范围 4    lambda应用的五个案例 5    函数式编程应用条件 6 提出问题 0 有用部分 4 lambda应用的五个案例 5 函数式编程应用条件 6 提出问题 本节主要介绍了lambda的使用方式,具体demo参照2-10 和2-15 1 函数式编程简介 函数式编程是一种不同的编程思想,定义函数作为公民,可以赋值给变量,作为参数或者返回值来传递 2 函数式编程和lambd

高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口

1 有用部分 2    代码演练 1 有用部分 个人理解: 1.1 关于lambda的应用 通过 @FunctionalInterface注解 将其参数 fileContent  注入,调用的时候可以直接调取到. 服务层通过直接调用接口的方法,没有用实现类 1.2 关于文件流的读取操作 demo中设计更多的流的读取的操作 2 代码演练 需求: 将本地文件打印出来 接口: package com.imooc.zhangxiaoxi.lambda.file; /** * 接口中只有一个抽象方法,可以

高效 告别996,开启java高效编程之门 2-15方法引用精讲

2-14课程和2-12重复了,所以没有发出来 1 方法引用使用条件 判断方法引用 是否满足场景的要求的时候,只需要看我们的出参和入参是否满足接口的要求即可 2 方法引用场景 四种方法引用类型: 指向静态方法 Class::staticMethod指向现有对象的实例方法 object::instanceMethod指向任意类型的实例方法 C1ass::instanceMethod指向构造方法 Class::new 3 方法引用demo package com.imooc.zhangxiaoxi.l

高效 告别996,开启java高效编程之门 3-6流操作分类

1 重点 理解流程操作分类 常用的方法 2 Stream流操作分类: 2.1 流操作分类之中间操作(Intermediate): 无状态操作——filter/map/peek等有状态操作——dictinct/sorted/limit等 2.2 流操作分类之终端操作(Termina1):非短路操作——forEach/collect/count等短路操作——anyMatch/findFirst/findAny等 2.3 有状态操作无状态操作区别: 无状态操作: 比如map或者filter会从输入流中

高效 告别996,开启java高效编程之门 3-5 Stream流概念解析

3-4讲的没有意义,直接过了 1 重点 概念解析中的定义 Stream流的组成 Stream流和集合的区别 2 概念解析 定义: 从支持数据处理操作的源生成的元素序列. 解释: 元素序列:和集合一样,流也是一个接口,可以访问特定元素类型的一组有序值,有序值就是元素序列 源:为流提供数据的源头,比如集合,数组,都可以称之为源. 数据处理操作:流的数据处理操作支持类似与数据库的操作(map,sort,limit)以及函数式编程语言中的一些常用操作. 功能: ◆JDK1.8引入的新成员,以声明式方式处

java 面向对象编程 --第十二章 JDK常用类

1.  系统类 java.lang包   System类 sys.out;sys.exit;sys.gc; sys.currentTimeMillis();----得到从1970-01-01到当前时间的毫秒数,long型 sys.getProperties();&sys.getProperty();user.dir确定&得到当前工程的工作目录,String型 2.  日期类 java.util包     Date类 @Deprecated——> 方法前加上该注解,表示该方法已过时,有

Java并发编程(三) 并发类库中的常用类

1. 同步容器类 遗留下来的同步容器类包括Vector和Hashtable,此外java.util.Collections类中还提供了以下工厂方法创建线程安全的容器对象: Collections.synchronizedList 返回支持同步操作(线程安全)的List对象: Collections.synchronizedSet 返回支持同步操作(线程全的)的Set对象: Collections.synchronizedMap 返回支持同步操作(线程安全)的Map对象: 需要注意的是,同步容器类

基于JVM原理JMM模型和CPU缓存模型深入理解Java并发编程

许多以Java多线程开发为主题的技术书籍,都会把对Java虚拟机和Java内存模型的讲解,作为讲授Java并发编程开发的主要内容,有的还深入到计算机系统的内存.CPU.缓存等予以说明.实际上,在实际的Java开发工作中,仅仅了解并发编程的创建.启动.管理和通信等基本知识还是不够的.一方面,如果要开发出高效.安全的并发程序,就必须深入Java内存模型和Java虚拟机的工作原理,从底层了解并发编程的实质:更进一步地,在现今大数据的时代,要开发出高并发.高可用.考可靠的分布式应用及各种中间件,更需要深