java - 使用两个列表在 Stream 内流式传输
问题描述
我有 2 个员工名单。第一个 List 包含姓名和employeeId,第二个 List 包含employeeId 和手机号码。员工 id 是主键。要求是使用流媒体获取包含 id、Name 和 mobile no 的 List。
public class MainApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee emp1 = new Employee(101, "Shiv1");
Employee emp2 = new Employee(102, "Shiv2");
Employee emp3 = new Employee(103, "Shiv3");
Employee emp4 = new Employee(104, "Shiv4");
Employee emp5 = new Employee(101, 00001);
Employee emp6 = new Employee(101, 00002);
Employee emp7 = new Employee(101, 00003);
Employee emp8 = new Employee(101, 00004);
List<Employee> employeeNameList = new ArrayList<Employee>();
employeeNameList.add(emp1);
employeeNameList.add(emp2);
employeeNameList.add(emp3);
employeeNameList.add(emp4);
List<Employee> employeeMobileList = new ArrayList<Employee>();
employeeMobileList.add(emp5);
employeeMobileList.add(emp6);
employeeMobileList.add(emp7);
employeeMobileList.add(emp8);
employeeNameList.stream()
.filter(item -> item.getId() == 3)
.map(i -> i.setMobileNo(9089));
}
}
解决方案
您可以使用第一个列表创建
empId
它们的映射。name
Map<Integer, String> empIdToName = employeeNameList.stream() .collect(Collectors.toMap(Employee::getId, Employee::getName, (a, b) -> a));
使用这样的映射进一步创建对象,同时遍历第二个并查找此映射,例如:
List<Employee> employees = employeeMobileList.stream() .filter(item -> empIdToName.containsKey(item.getId())) .map(i -> new Employee(i.getId(), empIdToName.get(i.getId()), i.getMobileNo())) .collect(Collectors.toList());
推荐阅读
- java - Checkmarx 错误:不可信数据的反序列化
- .net - 如何通过 InternetExplorerDriver 使 IE 从主页开始,以便在下一次测试运行时不会保留它们?
- java - 服务在按名称调用时使用 nullPointer 并在调用 rest 时工作
- regex - 正则表达式在 Dart 中不返回匹配项,但适用于在线正则表达式测试器
- sql-server - SSIS 数据流使用 SQL 代理失败
- php - 有什么方法可以在 laravel 中阻止 array[] 以前的 ID 以使用户无法选择它?
- android - 现有的Android项目打不开?
- java - ScheduledThreadPoolExecutor 中的线程超时
- javascript - 为什么数据表的标题与内容不对齐?
- perl - 如何安装 Parallel::ForkManager 模块?