int index(index on)

内容广告上

有这样的需求。当excel导出报告时,产品经理希望在第一列中添加序列号。可能大家都会问,你就不能直接取数据库的id吗?但是,会有问题。很多时候,当我们从数据库中获取数据时,我们也会将数据进行分组和其他业务操作。这样,这个id还会是我们想要的id吗?显然不是,有些身份证可能是10位数长度的分布式身份证。这是产品经理想要的吗?显然不是。

此时,Java8的流将出现在舞台上:

列表用户用户列表=新数组列表();

userList.add(新用户(' cxdcc ',' 05-07 ');

UserList.add(新用户(‘舒适之羽’,‘05-07’);

userList.add(新用户(' cxdcc ',' 05-06 ');

用户列表.添加(新用户('舒缓羽毛',' 05-06 ');

system . out . println(jsonobject . to jsonstring(user list));

//排序,将相同的名称放在一起,然后按时间排序。

用户列表=用户列表.流()。已排序(

比较器。比较(用户:获取用户名)。然后比较(用户:获取日期))。collect(collectors . tolist());

system . out . println(jsonobject . to jsonstring(user list));

//给列表的每个元素添加一个序号,如果Integer i=1,可以在这里尝试;把下一盘递给我,看看会发生什么。

整数[]arr={ 1 };

用户列表=用户列表.流()。peek(e-e.setId(arr[0])。collect(collectors . tolist());

system . out . println(jsonobject . to jsonstring(user list));打印结果:

[{'date':'05-07 ',' userName':'cxdcc'},

{ '日期' :' 05-07 ','用户名' : '放松羽毛' },

{'date':'05-06 ',' userName':'cxdcc'},

{ '日期' :' 05-06 ','用户名' : '放松羽毛' }]

[{'date':'05-06 ',' userName':'cxdcc'},

{'date':'05-07 ',' userName':'cxdcc'},

{ '日期' :' 05-06 ','用户名' : '放松羽毛' },

{ '日期' :' 05-07 ','用户名' : '放松羽毛' }]

[{'id':1,' date':'05-06 ',' userName':'cxdcc'},

{'id':2,'日期' :'05-07 ','用户名' :'cxdcc'},

{'ID' :3,'日期' :' 05-06 ','用户名' : '放松羽毛' },

{'ID' :4,'日期' :' 05-07 ','用户名' : '放松羽毛' }]

扩展

感兴趣的同学可以尝试将Integer数组改为Integer I=1;把下一套递给我。试试会发生什么。

这时会发现里面全是1,没有1,2,3,4.自增操作的结果;

原因总结

这是为什么?

因为Lambda表达式最终会被编译成匿名内部类,所以每个从事java的人都知道,如果在匿名内部类中调用外部变量,那么外部变量必须是final。这里如果是Integer的引用类型,就不会改变。如果是数组,它的引用不会改变,但是值可以通过自增量改变!

内容广告下