gpt4 book ai didi

java - 如何从 Java 8 Streaming 中的收集器中调用方法?

转载 作者:行者123 更新时间:2023-12-02 02:43:10 25 4
gpt4 key购买 nike

我有一些代码可以按照我想要的方式工作:

private Map<Florist, EnumSet<Flower>> localMethod(List<FlowerSellers> branchList) {
Map<Florist, EnumSet<Flower>> availableFlowers = new EnumMap<>(Florist.class);

branchList.stream()
.filter(f -> f instanceof FlorestFranchised)
.forEach(f -> availableFlowers.put(
FlorestHelperClass.florestTypeForKey(f.id()),
((FlorestFranchised) f).getFlowers()));

return availableFlowers;
}

为了论证,辅助类方法是:

public static Florist FlorestTypeForKey(String id) {
return FLOREST_MAP.get(id);
}

我想与 Collection 家一起做这件事,所以我想这样做......

return branchList.stream()
.filter(p -> p instanceof FlorestFranchised)
.map(p -> (FlorestFranchised) p)
.collect(Collectors.toMap(
FlorestFranchised::getId,
FlorestFranchised::getFlowers));

但显然这会失败,因为它没有进行辅助类查找,因此它不是返回 的映射,而是返回

但这失败了:

return branchList.stream()
.filter(p -> p instanceof FlorestFranchised)
.map(p -> (FlorestFranchised) p)
.collect(Collectors.toMap(
FlorestHelperClass.florestTypeForKey(FlorestFranchised::getId),
FlorestFranchised::getFlowers));

谁能告诉我应该如何调用收集器中的查找方法(FlorestHelperClass.florestTypeForKey)?可能吗?

最佳答案

Collectors.toMap 需要两个函数,分别根据传递到 collect 方法的值创建键和值。因此你可以这样做:

return branchList.stream()
.filter(p -> p instanceof FlorestFranchised)
.map(p -> (FlorestFranchised) p)
.collect(Collectors.toMap(
p -> FlorestHelperClass.florestTypeForKey(p.getId()), // key
p -> p.getFlowers() // value
));

最后一个 lambda 表达式可以替换为 FlorestFranchished::getFlowers

关于java - 如何从 Java 8 Streaming 中的收集器中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63231342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com