2

我有list一个Data对象

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

如何将其转换为listMap<String,List<Data>>收集data object共享相同的sharedId

我曾尝试使用这行代码,但没有运气

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

2 回答 2

1

以下应该有效:

Map<String,List<Data>> dataMap = 
    list.stream().collect(groupingBy(Data::getSharedId));
于 2021-09-22T13:53:23.387 回答
1

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


使用Stream API分组为Map<String, List<Data>>from List<Data>

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

使用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)));
于 2021-09-22T14:02:22.423 回答