JAVA8 stream流操作List集合处理数据

本文介绍如何在Java中操作数据库、脱敏身份证号、求和level数量、合并相同属性、处理复杂SQL查询、数据分组与求和,以及合并对象列表。涉及流式操作、Map和List处理等实用技术。

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:

monthcitytotal
9北京5
9上海5
10南京4
11广州10

需要进行的操作是:1.给list中每个city设置一个标记位flag,如1表示北京,2.表示上海,3表示南京,得到一个新的list:

monthcitytotalflag
9北京51
9上海52
10南京43
11广州104
在少量数据的情况下,这一步操作直接使用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());
	}
});

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈慌拥啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值