2 votes

Comment streamer et obtenir le type de format d'objet requis ?

J'ai un objet 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;
    }

}

et un Area Object

public class Areas {
    private String areaName;

    public String getAreaName() {
        return areaName;
    }

    public void setAreaName(String areaName) {
        this.areaName = areaName;
    }

}

J'essaie de parcourir en boucle l'ensemble de la liste des données d'entreprise dont la liste des zones contient "VENG", puis de récupérer cette donnée empData particulière

Voici mon client de test

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>

6voto

Eran Points 35360

Vous devez filter pas flatMap . Pour chaque EmpData appliquer un filtre qui passe en revue les zones List pour trouver le nom de la zone requise :

List<EmpData> allData =  
    empDataList.stream()
               .filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
               .collect(Collectors.toList());

Si vous voulez un seul EmptData par exemple, changer le fonctionnement du terminal :

Optional<EmpData> emp =  
    empDataList.stream()
               .filter(e->e.getAreasList().stream().anyMatch(a->a.getAreaName().equals("VENG")))
               .findFirst();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X