有这样一个需求,在excel导出报表的时候,产品经理想在首列加个序号,可能大家就会问了,直接取数据库的id不就可以吗?但是这样会有一个问题,很多时候我们从数据库捞数据出来还会对数据分组排序等一系列的业务操作,这样一来,这个id还会是我们想要的id吗?显然不是的,还有些id可能是分布式id,其长度就有10位之长,是产品经理想要的结果吗 ?显然不是。

这个时候Java8的stream就闪亮登场了:

List userList = new ArrayList<>();userList.add(new User("张三","05-07"));userList.add(new User("李四","05-07"));userList.add(new User("张三","05-06"));userList.add(new User("李四","05-06"));System.out.println(JSONObject.toJSONString(userList));//排序,把姓名相同的放在一起,再根据时间进行排序        userList = userList.stream().sorted(Comparator.comparing(User::getUserName).thenComparing(User::getDate)).collect(Collectors.toList());System.out.println(JSONObject.toJSONString(userList)); //给list每个元素添加序号,可以试下这里如果换成 Integer i = 1; 下面set的时候传 i++ 试下看会发生什么?        Integer[] arr = {1}; userList = userList.stream().peek(e->e.setId(arr[0] ++)).collect(Collectors.toList()); System.out.println(JSONObject.toJSONString(userList));

打印结果:

[{"date":"05-07","userName":"张三"}, {"date":"05-07","userName":"李四"}, {"date":"05-06","userName":"张三"}, {"date":"05-06","userName":"李四"}][{"date":"05-06","userName":"张三"}, {"date":"05-07","userName":"张三"}, {"date":"05-06","userName":"李四"}, {"date":"05-07","userName":"李四"}][{"id":1,"date":"05-06","userName":"张三"}, {"id":2,"date":"05-07","userName":"张三"}, {"id":3,"date":"05-06","userName":"李四"}, {"id":4,"date":"05-07","userName":"李四"}]

扩展
感兴趣的同学可以试下将Integer数组换成 Integer i = 1; 下面set的时候传 i++ 试下会发生什么?

这个时候会发现里面都是1,并没有发生自增运算的1,2,3,4..结果;

原因总结
这又是为什么呢?

因为Lambda表达式最终会编译为匿名内部类,搞java的人都知道,如果在匿名内部类中调用外部变量的时候,外部变量须为final,在这里如果是Integer的引用类型,则不会被改变,如果是数组,则它的引用不会改变,但是值可以通过自增运算去改变的!

list添加元素_如何给List集合的每个元素添加index序号相关推荐

  1. ruby三元操作符_在Ruby中使用操作符将元素添加到数组实例中

    ruby三元操作符 In the previous articles, we have gone through ways through which we can create Array inst ...

  2. ps网格添加元素_网格区域和占据它们的元素不一定是相同的大小。

    ps网格添加元素 作者 克里斯·科耶尔 最近更新时间 2017年11月12日 翻译自: https://css-tricks.com/grid-areas-element-occupies-arent ...

  3. scala集合中添加元素_如何在Scala中将元素添加到列表中?

    scala集合中添加元素 In Scala, lists are immutable data structures in which adding new elements is not allow ...

  4. Redis中有序集合zset数据类型(增加(添加元素)、获取(获取指定范围元素、返回权值在min和max之间的成员、返回成员member的score值)、删除(删除指定元素和指定权值范围的元素))

    sorted set,有序集合 元素为string类型 元素具有唯⼀性,不重复   [值不能重复] 每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序 说明:没有修 ...

  5. python空集_玩转Python集合,这一篇就够了!

    原标题:玩转Python集合,这一篇就够了! 点上方蓝色" 菜鸟学Python",选" 星标"公众号 重磅干货,第一时间送到 选自DataCamp, 作者:Mi ...

  6. python集合应用场景_十、python 集合的定义与使用

    一.集合的定义 定义:由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key. 特性:集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,无须纠结于集合中的单个值. (1 ...

  7. java集合的添加方法_深入理解java集合框架之---------Arraylist集合 -----添加方法

    Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...

  8. java arraylist排序_最全Java集合笔记

    集合概述 什么是集合 集合框架:用于存储数据的容器. 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 接口:表示集 ...

  9. java ee是什么_死磕 java集合之HashSet源码分析

    问题 (1)集合(Collection)和集合(Set)有什么区别? (2)HashSet怎么保证添加元素不重复? (3)HashSet是否允许null元素? (4)HashSet是有序的吗? (5) ...

最新文章

  1. redis mysql主从延迟_MySQL主从延迟问题解决
  2. 三星note4安装linux,Leanote Ubuntu 源码安装
  3. 聊聊阿里面试的三个层次!
  4. 超详细 图解 : IntelliJ IDEA 逆向生成 JAVA 实体类
  5. 4 年 46 个版本,一文读懂 Spring Cloud 发展历史
  6. 5种不会被机器智能替代的能力
  7. Anroid开发中常用快捷键
  8. java-判断集合中的某个元素的属性是否全部相同
  9. 宏基4750网卡驱动linux,宏碁4750g无线网卡驱动下载
  10. python opencv双目测距_OpenCV实现双目测距
  11. HTML图片动画特效
  12. excel删除无尽空白行_史上最简单的Excel工资条制作方法,实用收藏!
  13. Dialog加载页面动画(Loding.....加载等待)三种方式
  14. UI控件DevExpress WinForm新手指南——如何在应用启动时执行操作
  15. html玫瑰花效果代码,HTML5 canvas绘制的玫瑰花效果
  16. crackme01——Acid_burn
  17. 吞吐量 反应时间 延时 抖动 丢包 概念解释
  18. Xshell连接虚拟机失败,解决办法!
  19. 虚拟机下载安装、Docker下载安装
  20. 产品精益画布 Lean Canvas

热门文章

  1. 需求文档(PRD文档)应该怎么写?
  2. Leap Motion 之Unity 开发指南(一. 基本概念与制作手预制件)
  3. 查看邮件导致关联?亚马逊多账号管理必看
  4. 16个核心概念带你入门 Kubernetes
  5. Android LRUCache原理
  6. 关于雷蛇耳机麦克风突然失灵
  7. lm283_BP283X 最小输入输出压差和OVP电压的关系
  8. Java中限定类名和非限定类名的区别
  9. 15款js编辑器大全
  10. Redis五大数据结构的类型的使用