1.从List中取某一属性
场景:从数据库从查出用户信息的集合,其中有身份证号属性需进行脱敏处理
List<VO> rows
//对List进行stream流操作
//Util.idCardNum 工具类,将身份证号进行脱敏
List<VO> resultList = rows.stream.map(e ->{
e.setIdCard(Util.idCardNum(e.getIdCard()));
return e;}).collect(Collectors.toList());
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)));
5.合并list
场景:
list1:A对象信息:{"id":0001,"name":"Taylor"}
list2:B对象信息{"id":0001,"age":25}
期望得到:new List:{"id":0001,"name":"Taylor","age":25}
代码如下:
//1.将list1转换成Map
Map<String , A> map = list1.stream().collect(Collectors.toMap(A::getId,A->A));
//2.合并
list.forEach(e->{
if(map.containsKey(n.getId())){
A a = map.get(n.getId());
e.setName(a.getName());
}
});
本文介绍如何在Java中操作数据库、脱敏身份证号、求和level数量、合并相同属性、处理复杂SQL查询、数据分组与求和,以及合并对象列表。涉及流式操作、Map和List处理等实用技术。
1939

被折叠的 条评论
为什么被折叠?



