Java中通过List中的stream流去匹配相同的字段去赋值,避免for循环去查询数据库进行赋值操作

List<EquipmentDeviceMessage> equipmentDeviceMessageInfo = greenThinkTanksInfoPlanMapper.getEquipmentDeviceMessageInfo(phone, startDate, endDate);
List<BladeUserVo> userList = bladexsqlMapper.getUserList();

Q:上面两个列表怎么使用流,根据equipmentDeviceMessageInfo中的phone字段去匹配userList 中的phone字段再获取userList 中是name赋值给equipmentDeviceMessageInfo 中的name。
A:以前的写法是通过for循环遍历一个一个去查询赋值,这样的话如果数据多的话一个一个遍历会查询的话肯定是很慢的,下面的方法是通过List中的stream流去匹配并赋值。

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<EquipmentDeviceMessage> equipmentDeviceMessageInfo = greenThinkTanksInfoPlanMapper.getEquipmentDeviceMessageInfo(phone, startDate, endDate);
        List<BladeUserVo> userList = bladexsqlMapper.getUserList();

        // 将userList转换为Map,以phone为键,name为值
        Map<String, String> userMap = userList.stream()
                .collect(Collectors.toMap(BladeUserVo::getPhone, BladeUserVo::getName));

        // 遍历equipmentDeviceMessageInfo,根据phone匹配userMap,将name赋值给equipmentDeviceMessageInfo中的name字段
        equipmentDeviceMessageInfo.forEach(equipment -> {
            String phone = equipment.getPhone();
            if (userMap.containsKey(phone)) {
                equipment.setName(userMap.get(phone));
            }
        });
    }
}

首先使用流将userList转换为一个Map,以phone作为键,name作为值。接着,使用forEach方法遍历equipmentDeviceMessageInfo列表,根据phone匹配userMap,如果找到匹配项,则将对应的name赋值给equipmentDeviceMessageInfo中的name字段。

通过使用流,可以更加高效地处理大量数据,并且代码更简洁易读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
假设你有一个包含`User`对象的列表,并且`User`对象有一个`userId`属性,你可以使用JavaStream流来对列表的每个`User`对象的`userId`属性进行赋值。下面是一个示例: ```java import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; class User { private String userId; public User(String userId) { this.userId = userId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } } public class Main { public static void main(String[] args) { // 假设有一个包含User对象的列表 List<User> userList = new ArrayList<>(); userList.add(new User("user1")); userList.add(new User("user2")); userList.add(new User("user3")); // 使用Stream流对List<User>的userId进行赋值 List<User> updatedUserList = userList.stream() .map(user -> { user.setUserId(user.getUserId() + "_new"); return user; }) .collect(Collectors.toList()); // 输出结果 updatedUserList.forEach(user -> System.out.println(user.getUserId())); } } ``` 在上述示例,我们使用了Java 8 的Stream流来遍历`userList`,使用`map()`方法对每个`User`对象进行赋值操作,这里通过在原有的`userId`后面添加"_new"来进行赋值。最后,使用`collect()`方法将结果收集到一个新的列表。运行以上代码将输出: ``` user1_new user2_new user3_new ``` 这样,我们就使用Stream流对List<User>的userId进行赋值。你可以根据实际情况修改赋值操作的逻辑来满足自己的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

令人作呕的溏心蛋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值