第五章(2)使用流-----映射

1.map映射的基本使用

      一个非常常见的数据处理套路就是从某些对象中选择信息。比如在SQL里,你可以从表中选择一列。Stream API也通过map和flatMap方法提供了类似的工具。

List<Dish> menu = Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT), 
				   new Dish("beef", false, 700, Dish.Type.MEAT), 
				   new Dish("chicken", false, 400, Dish.Type.MEAT), 
				   new Dish("french fries", true, 530, Dish.Type.OTHER), 
				   new Dish("rice", true, 350, Dish.Type.OTHER), 
				   new Dish("season fruit", true, 120, Dish.Type.OTHER),
				   new Dish("pizza", true, 550, Dish.Type.OTHER),
				   new Dish("prawns", false, 300, Dish.Type.FISH), 
				   new Dish("salmon", false, 450, Dish.Type.FISH) );

List<String> dishName = menu.parallelStream().map(Dish::getName).collect(Collectors.toList());	

再比如,给定一个List<string>,要你提取每个元素的长度形成一个List:

继续比如,我们想获取菜品名称的长度呢?

第二个map是提取了Stream<String>流中的字符长度。

2.数组的流获取

一个普通的数组是怎么转换为流呢?Arrays类中提供了stream方法:

3.流的扁平化(合并)flatMap

     思考一个问题,给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"]。你可能会想到下面的处理方法:

我们发现失败了,从报错信息来看,split方法吧每个单词分隔后形成了一个数组,故此时的map返回的流Stream的类型是Stream<String[]>类型的一个List列表,而我们真正想要的是Stream<String>。上面我们知道了将数组转换为流的方法,那么我们现在就可以试试:

我们发现仍然不行,通过报错信息我们知道虽然我们把每个单词分隔的字母形成的数组转换为流,但是因为是多个单词的分隔而形成的多个数组,所以第二个map转化出来的流是一个stream<string>的列表!

这个时候,就要有请我们的flatMap方法登场了,它可以把流的列表合并为一个:

处理的流程图如下:

 

一道练习题:

给定两个列表[1,2,3]和[3,4],请拼凑出[[1,3],[1,4],[2,1],[2,4],[3,3],[3,4]]

再扩展一次:只要两个和能被3 整除的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值