2 votes

Mapper une instance contenant une liste vers un flatMap (en utilisant stream)

J'ai la classe "Store" suivante :

public class Store {
    private String storeId;
    private String storeName;
    private List<DayOfWeek> openiningDays;
}

(e.g.:)
{
    storeId: 1
    storeName: blabla
    openingDays: [MONDAY,TUESDAY,...]
}

et une liste de magasins "x".

List<Store> stores = ......

En utilisant la classe stream de java, ou une autre méthode similaire, je veux obtenir une liste plate des jours de la semaine, incluant le nom du magasin et l'identifiant du magasin.

par exemple : (résultat souhaité)

[
    {
    storeId: 1
    storeName: blabla
    openingDay: MONDAY
    },
    {
    storeId: 2
    storeName: blabla
    openingDay: SATURDAY
    },
    {
    storeId: 3
    storeName: blabla
    openingDay: FRIDAY
    }
]

J'ai déjà trouvé une solution possible, mais je n'en suis pas satisfait :

List<OtherType> transformed = new List<>();
for (Store store : stores) {
    for (DayOfWeek currentDay : openingDays) {
        transformed.add(new OtherType(.....));
    }
}

Est-il possible de faire cela avec quelque chose comme "flatMap(..)" ? (pour pouvoir utiliser la classe stream de java) ou une autre méthode prédéfinie ?

Merci d'avance :)

2voto

Deadpool Points 14474

En utilisant flatMap vous pouvez y parvenir, en commençant par diffuser le stores et ensuite dans flatMap flux List<DayOfWeek> en faisant correspondre chaque DayOfWeek à OtherType .

//Assuming you have constructor in OtherType with three arguments like OtherType(String storeId, String storeName, DayOfWeek day)

List<OtherType> transformed = stores.stream()
                                    .flatMap(store->store.getOpeningDays().stream()
                                                                      .map(day->new OtherType(store.getStoreId(),store.getStoreName(),day)))
                                    .collect(Collectors.toList());

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