我有一个 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;
}
}
和一个区域对象
public class Areas {
private String areaName;
public String getAreaName() {
return areaName;
}
public void setAreaName(String areaName) {
this.areaName = areaName;
}
}
我试图遍历整个 empDataList,其 AreasList 包含“VENG”, 然后获取特定的 EmpData
这是我的测试客户端
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());
}
Type mismatch: cannot convert from List<Areas> to List<EmpData>
最佳答案
您需要filter
,而不是flatMap
。对于每个 EmpData
元素,应用一个流经区域 List
的过滤器来定位所需的区域名称:
List<EmpData> allData =
empDataList.stream()
.filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
.collect(Collectors.toList());
如果你想要一个单一的EmptData
实例,改变终端操作:
Optional<EmpData> emp =
empDataList.stream()
.filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
.findFirst();
关于java - 如何流式传输并获取所需格式类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115694/