gpt4 book ai didi

java - 使用 maxBy() 处理流时类型不匹配

转载 作者:行者123 更新时间:2023-11-30 05:37:10 25 4
gpt4 key购买 nike

我正在编写一个代码来处理不同省份不同城市的山间小屋。我正在尝试计算每个海拔范围内单个山间小屋中可用的最大床位数量。如果山间小屋的海拔不可用,我会使用其城市的海拔高度。我希望我的方法返回 Map<String, Optional<Integer>>但我得到了 Map <String , Optional<MountainHut>> 。现在我意识到我得到的可选实际上是拥有最大床位数量的可选,但我正在努力获取正确的数据类型。

public Map<String, Optional<Integer>> maximumBedsNumberPerAltitudeRange()
{
return this.getMountainHuts().stream()
.collect(
Collectors.groupingBy((MountainHut mountainHut) ->
this.getAltitudeRange(
mountainHut.getAltitude().orElse(mountainHut.getMunicipality().getAltitude())
),
Collectors.maxBy(Comparator.comparing(MountainHut::getBedsNumber))
)
);
}

为了完整起见,我还将发布 getAltitudeRange 方法,其他方法方法只是 setter/getter 。

public String getAltitudeRange(Integer altitude) {
Range r = ranges.stream()
.filter((x) -> altitude>= x.getMin() || altitude <= x.getMax())
.findFirst()
.orElse(new Range(0,Integer.MAX_VALUE));
ranges.stream().close();
if(r.getMax() == Integer.MAX_VALUE)
{
return (0 +" - "+ "INF");
}
return (r.getMin() + " - " + r.getMax());
}

海拔高度是 MountainHut 类的可选属性

正如预期的那样,错误消息如下:类型不匹配:无法从 Map> 转换为 map >

最佳答案

maxBy 不会转换,它只是比较。您提取的 key (即床号)是 Comparator 的实现细节,而 maxBy 对此一无所知。

不过,你们实际上非常接近。您只需要在 groupingBy 和 maxBy 之间添加一个中间步骤即可。

public Map<String, Optional<Integer>> maximumBedsNumberPerAltitudeRange()
{
return this.getMountainHuts().stream()
.collect(
Collectors.groupingBy((MountainHut mountainHut) ->
this.getAltitudeRange(
mountainHut.getAltitude().orElse(mountainHut.getMunicipality().getAltitude())
),
Collectors.mapping(MountainHut::getBedsNumber, Collectors.maxBy(Comparator.naturalOrder()))
)
);
}

PS:在流重型类中,您可以添加 import static java.util.stream.Collectors.* 来摆脱样板文件。

关于java - 使用 maxBy() 处理流时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56358277/

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