它不是真正的代码,而是与我的确切场景的类比。这里主要关注的是 util 流管道。
让我们假设,我遵循对象模型
@Data
class ItemRequest {
String action;
List<ItemId> itemIds;
}
@Data
class ItemId{
ItemType itemType;
long itemKey;
}
@Getter
@AllArgsConstructor
enum ItemType{
String backingService;
String description;
ITEM_TYPE_1("backingService1","type 1 description"),
ITEM_TYPE_2("backingService1","type 2 description"),
ITEM_TYPE_3("backingService2","type 3 description"),
ITEM_TYPE_4("backingService2","type 4 description"),
ITEM_TYPE_5("backingService2","type 5 description"),
ITEM_TYPE_6("backingService3","type 6 description"),
ITEM_TYPE_7("backingService3","type 7 description"),
// so on
}
现在每个 ItemType 都有不同的后端微服务。我的 ItemType 枚举具有返回支持服务的吸气剂。所以我想通过支持服务来分解我的 ItemRequest。
我可以很容易地以命令方式或运行 2 个流管道来完成它。但我想在一个流管道中使用它
例如,简单来说,我的问题是如何将我在下面编写的以下 2 个步骤合并到一个管道 中。
Map<String,ItemRequest> breakItemRequestAsPerBackingService
(ItemRequest originalItemRequest ){
Map<String, List<ItemId>> collect
= originalItemRequest
.getItemIds()
.stream()
.collect(Collectors.groupingBy(
e -> e.getItemType().getBackingService()));
return collect
.entrySet()
.stream()
.collect(toMap(
Map.Entry::getKey,
e -> new ItemRequest(
originalItemRequest.getAction(),
e.getValue())));
}