【问题标题】:Project reactor, Convert Flux into Map<String,List<Data>>项目反应堆,将通量转换为 Map<String,List<Data>>
【发布时间】:2021-11-15 23:52:26
【问题描述】:

我有一个 listData 对象

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

如何将这个list转换成Map&lt;String,List&lt;Data&gt;&gt;,收集data object共享同一个sharedId一起

我尝试过使用这行代码,但没有成功

Map<String,List<Data>> dataMap= Flux.fromIterable(list)
        .collectMap(item-> item.getSharedId(),
                item-> item);

【问题讨论】:

    标签: java spring project-reactor reactive webflux


    【解决方案1】:

    Stream API 不等于 Reactive API,它们不可互换


    使用Stream APIMap&lt;String, List&lt;Data&gt;&gt;List&lt;Data&gt;分组:

    Map<String,List<Data>> dataMap = list.stream()
        .collect(Collectors.groupingBy(Data::getSharedId));
    

    使用Reactive API实现你类比实现Flux&lt;GroupedFlux&lt;String, Data&gt;&gt;或使用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)));
    

    【讨论】:

      【解决方案2】:

      以下应该有效:

      Map<String,List<Data>> dataMap = 
          list.stream().collect(groupingBy(Data::getSharedId));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 2021-02-28
        • 1970-01-01
        • 2021-12-21
        • 2016-07-21
        • 2020-04-01
        • 1970-01-01
        相关资源
        最近更新 更多