java - 使用子类的值过滤类的流
问题描述
我有一个包含对象Company
列表的父类Employee
。我需要创建一个Parent
类流,Employee
其中包含提到的电话号码。
Company cmp1 = new Company();
cmp1.setName("oracle");
Company cmp2 = new Company();
cmp1.setName("Google");
Employee emp1 = new Employee();
emp1.setName("David");
emp1.setPhone("900");
Employee emp2 = new Employee();
emp2.setName("George");
emp2.setPhone("800");
Employee emp4 = new Employee();
emp4.setName("BOB");
emp4.setPhone("300");
Employee emp5 = new Employee();
emp5.setName("taylor");
emp5.setPhone("900");
List<Employee> cmp1EmpList1 = new ArrayList<Employee>();
cmp1EmpList1.add(emp1);
cmp1EmpList1.add(emp2);
cmp1.setEmployees(cmp1EmpList1);
List<Employee> cmp1EmpList2 = new ArrayList<Employee>();
cmp1EmpList2.add(emp4);
cmp1EmpList2.add(emp5);
cmp2.setEmployees(cmp1EmpList2);
List<Company> companies = Arrays.asList(cmp1, cmp2);
要检索流,我尝试添加以下代码
List<Company> companiesWithEmployeesphone800 = companies.stream()
.filter(loc -> loc.getEmployees()
.stream()
.flatMap(locnew -> locnew.getPhone()
.equalsIgnoreCase("800"))
)
.collect(Collectors.toList());
但收到不兼容的类型。
解决方案
用于anyMatch
谓词而不是flatMap
作为:
List<Company> companiesWithEmployeesphone800 =
companies.stream()
.filter(loc -> loc.getEmployees().stream()
.anyMatch(locnew -> locnew.getPhone().equalsIgnoreCase("800")))
.collect(Collectors.toList());
推荐阅读
- webpack - Webpack 无法解析“babel-loader”
- javascript - 构建 API 时,解析服务器上的业务逻辑在哪里?
- bash - 在 zsh 脚本中传播第 n 个参数之后的所有参数
- angular - Angular + Electron - 构建和分发 URL
- java - 如何使用 Spring5 WebClient 进行异步调用
- python-3.x - 将 Cassandra 与 Python 连接的有效方法(抑制警告)
- javascript - 使用 Flask 应用程序热重载 VanilaJS 或在每次 src 更改时创建 bundle.js
- c# - 以编程方式设置 httpErrors existingResponse "PassThrough" ASP.NET MVC
- google-cloud-platform - 我正在尝试将 Project Creator 角色授予 GCP 中 IAM 的服务帐户
- javascript - 无法将数组作为数组操作