Java 如何流式传输和获取所需的对象格式类型
我有一个EmpData对象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
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();