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 实战演示之扁平化(flatMap):
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
诸葛