1.从List中取某一属性
场景:从数据库从查出用户信息的集合,其中有身份证号属性需进行脱敏处理
//将JSON格式的出参转换成list
List<VO> rows = (List<VO>)JSONResult.getRows();
//对List进行stream流操作
//Util.idCardNum 工具类,将18位身份照号中间几位数字转化为*号
List<VO> resultList = rows.stream.map(e ->{
e.setIdCard(Util.idCardNum(e.getIdCard()));
return e;}).collect(Collectors.toList());
//将操作后的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 = mapper.getxxx();
//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 |
11 | 广州 | 10 |
需要进行的操作是:1.给list中每个city设置一个标记位flag,如1表示北京,2.表示上海,3表示南京,得到一个新的list:
month | city | total | flag |
---|---|---|---|
9 | 北京 | 5 | 1 |
9 | 上海 | 5 | 2 |
10 | 南京 | 4 | 3 |
11 | 广州 | 10 | 4 |
在少量数据的情况下,这一步操作直接使用for循环即可得到
⑵.根据月份分组,将total求和
①.首先定义一个转换类,将list中的month和total进行转换:
private voResult convert(Vo vo){
voResult result = new voResult();
result.month = vo.getMonth();
result.total = vo.getTotal();
}
/**
*将list根据月份分组,并求total的和,
*得到的Map:key为月份,value为total的和
*/
Map<Integer , Integer> collect = list.stream().map(this::convert)
.collect(Collectors.groupingBy(voResult::getMonth,Collectors.summingInt(voResult::getTotal)));
版权声明:本文为c4013原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。