java - 如何流式传输并获取所需格式类型的对象

标签 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;
    }
    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/

相关文章:

java - 是否可以构造一个 Java 流表达式来返回一个 2D boolean 数组,所有值都设置为 true?

java - 如何强制 max 返回 Java Stream 中的所有最大值?

java - Swing 计时器和耗时任务

java - ConcurrentHashMap putIfAbsent : atomicity when followed by a get() call

java - 无法在java中移动对象

java - 使用 Stream 从字符串中获取二维 char 数组

入口集上的 Java 8 流映射

java - 使用链接整数节点的插入排序

java - 如何设置定时器,即使App关闭?

string - Stream - 打印排序前后的值