Как вернуть список с потоками в этом случае? - PullRequest
2 голосов
/ 29 марта 2019

У меня есть этот метод

private List<StudentVO> getStudentVOList() {
    List<HouseDTO> hDtoList = new ArrayList<HouseDTO>();
    for (HouseDTO hdn : hDtoList) {
        if (hdn.getHouseName().equals("ZSRT")) {
            return hdn.getStudents();
        }
    }

, который я пытаюсь преобразовать в Java 8, я попытался, как показано ниже

return  hDtoList.stream().filter(hdn->hdn.getHouseName().equals("ZSRT")).map(hdn->hdn.getStudents()).collect(Collectors.toList());

-

public class HouseDTO {

    public String getHouseName() {
        return houseName;
    }
    public void setHouseName(String houseName) {
        this.houseName = houseName;
    }
    public List<StudentVO> getStudents() {
        return students;
    }
    public void setStudents(List<StudentVO> students) {
        this.students = students;
    }
    private String houseName ;
    List<StudentVO> students;
}


public class StudentVO {

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getRollNo() {
        return rollNo;
    }
    public void setRollNo(int rollNo) {
        this.rollNo = rollNo;
    }
    private String name;
    private int rollNo;
}

Ответы [ 3 ]

4 голосов
/ 29 марта 2019

Вы можете использовать findAny или findFirst после map, затем orElse(someDefaulValues), в вашем случае пустую коллекцию.

return  hDtoList.stream()
                .filter(hdn->hdn.getHouseName().equals("ZSRT"))
                .findFirst()
                .map(StudentVO::getStudents)
                .orElse(Collections.emptyList());
1 голос
/ 29 марта 2019
List<StudentVO> studentsList=hDtoList.stream().filter(hdto->hdto.getHouseName().equals("ZSRT")).findFirst().get().getStudents();

// studentsList may be null if not found
1 голос
/ 29 марта 2019

попробуйте следующее с использованием flatMap

List<StudentVO> studentVOList = hDtoList.stream()
            .filter(h -> h.getHouseName().equals("ZSRT"))
            .flatMap(h -> h.getStudentVOList().stream())
            .collect(Collectors.toList());
...