JAVA8stream流操作List集合处理数据
1.从List中取某⼀属性
场景:从数据库从查出⽤户信息的集合,其中有⾝份证号属性需进⾏脱敏处理
//将JSON格式的出参转换成list
List<VO> rows =(List<VO>)Rows();
//对List进⾏stream流操作
//Util.idCardNum ⼯具类,将18位⾝份照号中间⼏位数字转化为*号
List<VO> resultList = rows.stream.map(e ->{
e.setIdCard(Util.IdCard()));
return e;}).List());
//将操作后的List转化为JSON返回
jsonResult.setRows(resultList);
return jsonResult;
2.将list中某⼀属性求和
场景:从数据库中取出List集合,level属性对应number有多少个,出参需返回其number总数
{
"data":{
"vo":[
{
"level":"B",
"number":7
},
{
"level":"A",
"number":18
},
{
"level":"C",
"number":2
}
],
"total":27
},
}
//mapper层操作数据库得到list集合
List<VO> list = ();
//stream操作list将number进⾏求和得到total
Integer total = list.stream().mapToInt(VO::getNumber).sum();
3.合并两个属性都相同的List
List<VO> list =new ArrayList<>();
Stream.of(list1 , list2).forEach(list::addAll);
4.相对复杂的操作
⑴.SQL查出⼀个list:
month city total 9北京5
9上海5
10南京4
month city total
11⼴州10需要进⾏的操作是:1.给list中每个city设置⼀个标记位flag,如1表⽰北京,2.表⽰上海,3表⽰南京,得到⼀个新的list: month city total flag 9北京51
9上海52
10南京43
11⼴州104在少量数据的情况下,这⼀步操作直接使⽤for循环即可得到
⑵.根据⽉份分组,将total求和
①.⾸先定义⼀个转换类,将list中的month和total进⾏转换:
private voResult convert(Vo vo){
voResult result =new voResult();
java stream
}
/**
*将list根据⽉份分组,并求total的和,
*得到的Map:key为⽉份,value为total的和
*/
Map<Integer , Integer> collect = list.stream().map(this::convert)
.upingBy(voResult::getMonth,Collectors.summingInt(voResult::getTotal)));

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。