项目反应器,将 Flux 转换为 Map<String,List<Data>>
Project reactor, Convert Flux into Map<String,List<Data>>
我有一个 list
个 Data
个对象
public class Data{
private String id;
private String sharedId;
}
如何将此 list
转换为 Map<String,List<Data>>
,收集共享相同 sharedId
的 data object
我试过使用这行代码,但是没有成功
Map<String,List<Data>> dataMap= Flux.fromIterable(list)
.collectMap(item-> item.getSharedId(),
item-> item);
以下应该有效:
Map<String,List<Data>> dataMap =
list.stream().collect(groupingBy(Data::getSharedId));
Stream API 不等于 Reactive API,它们 不可互换。
使用 Stream API 从 List<Data>
:
分组到 Map<String, List<Data>>
Map<String,List<Data>> dataMap = list.stream()
.collect(Collectors.groupingBy(Data::getSharedId));
Using Reactive API 来实现你类比地实现 Flux<GroupedFlux<String, Data>>
或使用 Map.Entry
:
扩展结构
Flux<GroupedFlux<String, Data>> groupedFlux = Flux.fromIterable(list)
.groupBy(Data::getSharedId);
Flux<Map.Entry<String, List<Data>>> groupedFlux = Flux.fromIterable(list)
.groupBy(Data::getSharedId)
.flatMap(group -> group
.collectList()
.map(listOfData -> Map.entry(group.key(), listOfData)));
我有一个 list
个 Data
个对象
public class Data{
private String id;
private String sharedId;
}
如何将此 list
转换为 Map<String,List<Data>>
,收集共享相同 sharedId
的 data object
我试过使用这行代码,但是没有成功
Map<String,List<Data>> dataMap= Flux.fromIterable(list)
.collectMap(item-> item.getSharedId(),
item-> item);
以下应该有效:
Map<String,List<Data>> dataMap =
list.stream().collect(groupingBy(Data::getSharedId));
Stream API 不等于 Reactive API,它们 不可互换。
使用 Stream API 从 List<Data>
:
Map<String, List<Data>>
Map<String,List<Data>> dataMap = list.stream()
.collect(Collectors.groupingBy(Data::getSharedId));
Using Reactive API 来实现你类比地实现 Flux<GroupedFlux<String, Data>>
或使用 Map.Entry
:
Flux<GroupedFlux<String, Data>> groupedFlux = Flux.fromIterable(list)
.groupBy(Data::getSharedId);
Flux<Map.Entry<String, List<Data>>> groupedFlux = Flux.fromIterable(list)
.groupBy(Data::getSharedId)
.flatMap(group -> group
.collectList()
.map(listOfData -> Map.entry(group.key(), listOfData)));