spring 项目React器,将通量转换为Map〈String,List< Data>>

kzmpq1sx  于 2022-12-10  发布在  Spring
关注(0)|答案(3)|浏览(117)

我有一个Data对象的list

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);
ilmyapht

ilmyapht1#

流API不等于React式API,它们 * 不可互换 *。
使用流APIList<Data>分组到Map<String, List<Data>>

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

使用Reactive API来实现类似的Flux<GroupedFlux<String, Data>>或使用Map.Entry扩展结构:
第一次

omqzjyyz

omqzjyyz2#

以下方法应该有效:

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

xmq68pz93#

关于Nikolas & Joao之前的回答,您也可以用途:

Mono<Map<String, Collection<Data>>> mapCollection = Flux.fromIterable(list)                                       
                                              .collectMultimap(Data::getSharedId, item -> item);

如果需要列表,您可以进一步Map到特定集合:

Mono<Map<String, List<Data>>> mapList = mapCollection
    .map(map -> map
        .entrySet()
        .stream()
        .collect(Collectors.toMap(Entry::getKey, e -> List.copyOf(e.getValue()))))

或用途:

Mono<Map<String, List<Data>>> mapList2 = Mono.just(list)
                                         .map(l -> l.stream().collect(Collectors.groupingBy(Data::getSharedId)));

相关问题