如何合并两个不同对象列表,替换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
相关产品推荐
相关产品推荐

