文档章节

Java8flatMap在简单应用,以及遍历循环体内接收数据对象new的思考。

R
 Refresh-LV
发布于 2017/07/27 16:04
字数 370
阅读 7
收藏 0

 

  PageList<CouponExcitingActivity> modelPageList    =   

                                      iCouponExcitingActivityService
                                    .findCouponExcitingActivityList(couponExcitingActivitySO, pagerCondition);
      PageList<CouponExcitingActivityVO> voPageList = new PageList<>();
  List<CouponExcitingActivityVO> voList =

                                         CouponExcitingActivityVO.convertToVOList(modelPageList.getDataList());

   List<Integer> cityIdList = voList.stream()
                                                .map(p -> p.getCityIdList())
                                                .flatMap(p -> p.stream())
                                                .distinct()
                                               .collect(Collectors.toList());
Map<Integer, JiupiCity> cityIdMap = iJiupiCityService.findJiupiCityListByCityIdList(cityIdList);
                   voList.stream().forEach(v -> {
                             List<Integer> cityIds = v.getCityIdList();
                             List<JiupiCity> jiupiCitys = new ArrayList<>();
                                    if (CollectionUtils.isNotEmpty(cityIds)) {
                                               for (Integer id : cityIds) {
                                                JiupiCity jiupiCity = cityIdMap.get(id);
                                                jiupiCitys.add(jiupiCity);
                                       }
                                    v.setJiupiCitys(jiupiCitys);
                               }
                          });
           voPageList.setDataList(voList);
          voPageList.setPager(modelPageList.getPager());
          return voPageList;

---------------------------------java8中flatMap---------------------------------------------

            flatMap的使用 .flatMap(p -> p.stream())/.flatMap(Arrays::stream)中将集合中的所有id拆分为单个的流元素------>在map中,这个集合中所有的元素组合为一个流对象,flatMap将这个流对象中的所有元素拆分出来,分解为多个流对象,一个流对象只有一个元素,然后distinct去重,再收集组合为新的集合。

---------------------------关于遍历问题中接收数据对象new的疑惑-----------------------------

  错误代码:

        List<JiupiCity> jiupiCitys = new ArrayList<>();
        Map<Integer, JiupiCity> cityIdMap = iJiupiCityService.findJiupiCityListByCityIdList(cityIdList);
        voList.stream().forEach(v -> {
                     List<Integer> cityIds = v.getCityIdList();
                     jiupiCitys.clear();
                      if (CollectionUtils.isNotEmpty(cityIds)) {
                                               for (Integer id : cityIds) {
                                                JiupiCity jiupiCity = cityIdMap.get(id);
                                                jiupiCitys.add(jiupiCity);
                                       }
                                    v.setJiupiCitys(jiupiCitys);
                               }
                          });

       voPageList.setDataList(voList);

错误场景:本应该对应记录得到对应的城市信息,  在 v.setJiupiCitys(jiupiCitys);中,每条记录获得城市数据是正确的,但是在遍历结束,voPageList.setDataList(voList);中,所有记录的城市数据全部是最后一条记录的城市数据。

思考: List<JiupiCity> jiupiCitys = new ArrayList<>();放在循环体内,放在循环体外,为什么会对最终的数据产生影响????

 

List<Long> list = new ArrayList<Long>(productSkuIds);
List<Long> list = productSkuIds.stream().collect(Collectors.toList());

 

© 著作权归作者所有

R
粉丝 1
博文 23
码字总数 7973
作品 0
仙桃
私信 提问
想写出优雅的代码?试试这些ES6小tips

最近又重温了ES6的文档,发现除了箭头函数,解构赋值,扩展运算符这样常用的语法外,还有很多很给力的方法,不仅使代码更简洁,还可以提高代码的健壮性,更令我意外的是,浏览器兼容大部分的...

whuzxq
2018/07/17
0
0
如何简单并优雅的处理一类操作数组元素的问题

本期题目 「 题目 」: 删除给定一维数组(暂不考虑多维)元素中不符合条件的元素,结果返回新的数组 首先,我们在实际开发中会遇到很多处理数组的场景,其实无非就是四个字——"增删查改"。 但是...

Wumw
2018/11/13
0
0
如何优雅地改善程序中for循环

众所周知,在我们的日常编码里,对于一些数据的迭代以及遍历,首先想到的是 这没毛病,编写语法很简单,只需要知道数据列表的长度即可进行遍历取值,举个例子: 有点编程基础的童鞋,都可以很...

Andraw-lin
2018/10/18
0
0
Python 工匠:编写地道循环的两个建议

循环是一种常用的程序控制结构。我们常说,机器相比人类的最大优点之一,就是机器可以不眠不休的重复做某件事情,但人却不行。而“循环”,则是实现让机器不断重复工作的关键概念。 在循环语...

急速奔跑中的蜗牛
06/13
0
0
ES6中的迭代器、Generator函数以及Generator函数的异步操作

最近在写RN相关的东西,其中涉及到了redux-saga ,saga的实现原理就是ES6中的Generator函数,而Generator函数又和迭代器有着密不可分的关系。所以本篇博客先学习总结了iterator相关的东西,然...

青玉伏案
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象编程

1、类和对象 类是对象的蓝图和模板,而对象是实例;即对象是具体的实例,类是一个抽象的模板 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定...

huijue
今天
8
0
redis异常解决 :idea启动本地redis出现 jedis.exceptions.JedisDataException: NOAUTH Authentication required

第一次安装在本地redis服务,试试跑项目,结果却出现nested exception is redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required错误,真是让人头疼 先检查一...

青慕
今天
10
0
Spring 之 IoC 源码分析 (基于注解方式)

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml...

星爵22
今天
25
0
Docker安装PostgresSql

Docker安装PostgresSql 拉取docker镜像 # docker pull postgres:10.1010.10: Pulling from library/postgres9fc222b64b0a: Pull complete 38296355136d: Pull complete 2809e135bbdb: Pu......

Tree
今天
8
0
内容垂直居中

方法一: 采用上下 padding 形式,将内容放置在垂直居中 .line { padding: 2% 0; text-align: center; height: 5px;} <div class="line"> 内容垂直居中</div> 方法二: 采......

低至一折起
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部