将包含列表的实例映射到 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());
我有以下 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());