Java 如何流式传输和获取所需的对象格式类型

Java 如何流式传输和获取所需的对象格式类型,java,java-stream,Java,Java Stream,我有一个EmpData对象 import java.util.ArrayList; import java.util.List; public class EmpData { private List<Areas> areasList = new ArrayList<Areas>(); public List<Areas> getAreasList() { return areasList; } pub

我有一个EmpData对象

import java.util.ArrayList;
import java.util.List;

public class EmpData {


    private List<Areas> areasList = new ArrayList<Areas>();


    public List<Areas> getAreasList() {
        return areasList;
    }
    public void setAreasList(List<Areas> areasList) {
        this.areasList = areasList;
    }


}
我试图循环浏览整个empDataList,其AreasList包含“VENG”, 然后获取特定的EMP数据

这是我的测试客户端

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ClientTest {

    public static void main(String[] args) {

        List<EmpData> empDataList = new ArrayList<>();
        List<Areas> areasList = new ArrayList<Areas>();


        Areas area1 = new Areas();
        area1.setAreaName("VENG");

        areasList.add(area1);

        EmpData empData1 = new EmpData();

        empData1.setAreasList(areasList);

        empDataList.add(empData1);


        List<EmpData> allData =  empDataList.stream()
            .flatMap(e -> e.getAreasList().stream()
                .filter(a -> a.getAreaName().equals("VENG")))
            .collect(Collectors.toList());

    }
import java.util.ArrayList;
导入java.util.List;
导入java.util.stream.collector;
公共类客户端测试{
公共静态void main(字符串[]args){
List empDataList=newarraylist();
列表区域列表=新的ArrayList();
面积面积1=新面积();
区域1.设置区域名称(“VENG”);
区域列表添加(区域1);
EmpData empData1=新的EmpData();
empData1.设置区域列表(区域列表);
empDataList.add(empData1);
List allData=empDataList.stream()
.flatMap(e->e.getAreasList().stream())
.filter(a->a.getAreaName().equals(“VENG”))
.collect(Collectors.toList());
}
}

类型不匹配:无法从列表转换为列表

您需要的是
过滤器
,而不是
平面图
。对于每个
EmpData
元素,应用一个在区域
列表
上流动的过滤器,以定位所需的区域名称:

List<EmpData> allData =  
    empDataList.stream()
               .filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
               .collect(Collectors.toList());

请不要使用任何匹配项suggest@user974802为什么不能使用
anyMatch
?@user974802是否要获取单个
EmpData
列表
?根据您尝试的代码(以
toList()
结尾),我假设您需要一个
列表
@user974802如果您想使用
过滤器
,必须向它传递一个
谓词
。这就是我正在做的。你试过我的代码了吗?@user974802你为什么反对使用
anyMatch
?这正是你想要的。
Type mismatch: cannot convert from List<Areas> to List<EmpData> 
List<EmpData> allData =  
    empDataList.stream()
               .filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
               .collect(Collectors.toList());
Optional<EmpData> emp =  
    empDataList.stream()
               .filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
               .findFirst();