Как транслировать и получить требуемый тип формата объекта - PullRequest
1 голос
/ 26 сентября 2019

У меня есть объект 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> 

1 Ответ

5 голосов
/ 26 сентября 2019

Вам нужно 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...