You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个不同对象列表,替换user_id为用户名后展示在RecyclerView

实现方案

1. 前置处理

首先修复现有代码的潜在问题:你当前声明的List<User> userList;没有初始化,会触发空指针异常,先修改为List<User> userList = new ArrayList<>();。

然后给TraitementTicketModel实体类新增userName字段,添加对应的get、set方法,用来存储匹配到的用户名。

2. 新增全局变量用于状态判断和数据映射

在当前类中新增以下变量:

// 标记两个接口是否加载完成
private boolean isFollowUpLoaded = false;
private boolean isUserLoaded = false;
// 用户id到用户名的映射表,O(1)效率匹配,比循环遍历查询效率高
// 如果你的user_id是Int类型,把泛型改为HashMap<Integer, String>
private HashMap<String, String> userIdToNameMap = new HashMap<>();

3. 改造两个接口的成功回调

改造第一个获取跟进列表的回调onResponse:

@Override
public void onResponse(Call<List<TraitementTicketModel>> call, Response<List<TraitementTicketModel>> response) {
    if (!response.isSuccessful()) {
        Toast.makeText(getApplicationContext(), "Something is wrong !! ", Toast.LENGTH_LONG).show();
        Log.e("TAG", "onResponse: something is wrong");
        return;
    }
    if (response.body() == null) {
        return;
    }
    List<TraitementTicketModel> followups = response.body();
    for (TraitementTicketModel followup : followups) {
        followuplist.add(followup);
    }
    followuplist.add(firstfollowup());
    // 标记跟进列表加载完成
    isFollowUpLoaded = true;
    // 检查是否两个接口都加载完成,是则执行合并
    tryMergeData();
}

改造第二个获取用户列表的回调onResponse:

@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
    if (response.code() != 200){
        Log.e("TAG", "onResponse: something is wrong"+response.code() );
        return;
    }
    List<User> users = response.body();
    if(users == null){
        return;
    }
    // 构建id到用户名的映射
    for (User user : users){
        // 替换为你User类中实际的getUserId、getUserName方法名
        userIdToNameMap.put(user.getUserId(), user.getUserName());
        userList.add(user);
    }
    swipeRefreshLayout.setRefreshing(false);
    // 标记用户列表加载完成
    isUserLoaded = true;
    // 检查是否两个接口都加载完成,是则执行合并
    tryMergeData();
}

4. 实现数据合并方法

private void tryMergeData(){
    // 两个接口都加载完成才执行后续逻辑
    if(!isFollowUpLoaded || !isUserLoaded){
        return;
    }
    // 遍历跟进列表匹配用户名
    for (TraitementTicketModel followup : followuplist) {
        // 替换为你TraitementTicketModel类中实际的getUserId方法名
        // 匹配不到默认展示“未知用户”,可自行修改默认值
        String userName = userIdToNameMap.getOrDefault(followup.getUserId(), "未知用户");
        followup.setUserName(userName);
    }
    // 把合并后的followuplist传给RecyclerView的Adapter,刷新列表
    // 替换为你自己的Adapter实例和更新数据的方法
    yourAdapter.setNewData(followuplist);
    yourAdapter.notifyDataSetChanged();
}

注意事项

  • 以上代码中的get/set方法名请替换为你实体类中实际的方法名
  • user_id的类型要和HashMap的key类型保持一致,避免匹配失败
  • 如果需要处理接口请求失败的场景,可以在对应回调中加重试逻辑或者加载失败提示

内容的提问来源于stack exchange,提问作者Laroussi Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:03:02