将包含列表的实例映射到 flatMap(使用流)

Map an instance containing a list to a flatMap (using stream)

我有以下 class 'Store':

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

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

和 'x' 家商店的列表

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

使用 java 的流 class 或另一种方法, 我想得到一个平日列表, 包括 storeName 和 storeId。

例如:(期望的结果)

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

我已经找到了可能的解决方案, 但我对此并不满意:

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

有没有可能用 'flatMap(..)' 之类的东西来做到这一点 (能够使用 java 的流 class) 还是其他预定义的方法?

提前谢谢你:)

通过使用 flatMap 您可以实现此目的,首先流式传输 stores 列表,然后在 flatMap 中流式传输 List<DayOfWeek>,方法是将每个 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());