项目反应器,将 Flux 转换为 Map<String,List<Data>>

Project reactor, Convert Flux into Map<String,List<Data>>

我有一个 listData 个对象

public class Data{
    private String id;
    private String sharedId;
}

如何将此 list 转换为 Map<String,List<Data>>,收集共享相同 sharedIddata 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 APIList<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)));