Java 使用子类的值筛选类的流

Java 使用子类的值筛选类的流,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个父类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("9

我有一个父类
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);
公司cmp1=新公司();
cmp1.setName(“oracle”);
公司cmp2=新公司();
cmp1.setName(“谷歌”);
员工emp1=新员工();
emp1.设定名称(“大卫”);
emp1.设置电话(“900”);
员工emp2=新员工();
emp2.设定名称(“乔治”);
emp2.设置电话(“800”);
员工emp4=新员工();
emp4.集合名(“BOB”);
emp4.设置电话(“300”);
员工emp5=新员工();
emp5.设定名称(“泰勒”);
emp5.设置电话(“900”);
List cmp1EmpList1=new ArrayList();
cmp1EmpList1.add(emp1);
cmp1EmpList1.add(emp2);
cmp1.setEmployees(cmp1雇员1);
List cmp1EmpList2=新建ArrayList();
cmp1EmpList2.add(emp4);
cmp1EmpList2.add(emp5);
cmp2.setEmployees(CMP1雇员2);
上市公司=Arrays.asList(cmp1、cmp2);
为了检索流,我尝试添加以下代码

List<Company> companiesWithEmployeesphone800 = companies.stream()
    .filter(loc -> loc.getEmployees()
                    .stream()
                    .flatMap(locnew -> locnew.getPhone()
                                        .equalsIgnoreCase("800"))
            )
    .collect(Collectors.toList());
List 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());
列出有员工的公司Sphone800=
公司:stream()
.filter(loc->loc.getEmployees().stream())
.anyMatch(locnew->locnew.getPhone().equalsIgnoreCase(“800”))
.collect(Collectors.toList());

由于大小写敏感度与
“800”
之类的字符串无关,因此简单的
等于
也可以…