我来问一个我觉得以前没有人问过的问题,可能会得到一些有趣的答案:)
我目前正在研究一些Java代码,其目标是:
收藏列表
public record ForecastPerDate(String date, Double value) {}
到目前为止,我的实现对我来说似乎相当高效和理智,但我不喜欢改变变量或状态(我最近变得更像Haskell开发人员,哈哈),并且一直很喜欢使用Java的Streams API。
仅供参考,该项目使用Java 17,因此很有帮助。我假设这可能可以通过一个
reduce()
函数和一些累加器来解决,但我不清楚如何解决,至少不会导致多次迭代。
代码如下:
@Override
public Long getAvailabilityFromForecastData(final String fuCode,
final String articleCode,
final Collection<ForecastPerDate> forecasts) {
if (forecasts == null || forecasts.isEmpty()) {
log.info(
"No forecasts received for FU {} articleCode {}, assuming 0!",
fuCode,
articleCode
);
return 0L;
}
final long todayEpochDay = LocalDate.now().toEpochDay();
final Map<String, Double> forecastMap = new HashMap<>();
long smallestDiff = Integer.MAX_VALUE;
String smallestDiffDate = null;
for (final ForecastPerDate forecast : forecasts) {
final long forecastEpochDay = LocalDate.parse(forecast.date()).toEpochDay();
final long diff = forecastEpochDay - todayEpochDay;
if (diff >= 0 && diff < smallestDiff) {
// we look for values in present or future (>=0)
smallestDiff = diff;
smallestDiffDate = forecast.date();
forecastMap.put(forecast.date(), forecast.value());
}
}
if (smallestDiffDate != null) {
final Double wantedForecastValue = forecastMap.get(smallestDiffDate);
if (wantedForecastValue != null) {
return availabilityAmountFormatter(wantedForecastValue);
}
}
log.info(
"Resorting to fallback for FU {} articleCode {}, 0 availability for article! Forecasts: {}",
fuCode,
articleCode,
forecasts
);
return 0L;
}
private Long availabilityAmountFormatter(final Double raw) {
return Math.round(Math.floor(raw));
}
提前感谢!期待学习和建设性反馈!
如果要保持与现有流程相似的流程,请尝试以下操作:
final LocalDate now = LocalDate.now();
return forecasts.stream()
.map(ForecastPerDate::date)
.map(LocalDate::parse)
.filter(fd -> fd.isEqual(now) || fd.isAfter(now))
.min()
.map(LocalDate::toString)
.map(forecastMap::get)
.map(this::availabilityAmountFormatter)
.orElseGet(() -> {
log.info("Resorting to fallback...");
return 0L;
});
您提到的大多数操作都是流上可用的方法调用。
总的来说,它应该是这样的(我还没有编译它,所以第一次尝试时可能不起作用):
@Override
public Long getAvailabilityFromForecastData(final String fuCode,
final String articleCode,
final Collection<ForecastPerDate> forecasts) {
var today = LocalDate.now();
return forecasts.stream()
.filter(forecast -> !today.isBefore(LocalDate.parse(forecast.date())))
.min(Comparator.comparing(forecast ->
Duration.between(today, LocalDate.parse(forecast.date()))
.map(forecast -> availabilityAmountFormatter(forecast.value()))
.orElseGet(() -> {
log.info("No forecasts found");
return 0L;
});
}
我会将一些逻辑移到ForecastPerDate中,以避免分析forecast。date()多次。
问题内容: 我正在寻找一种借助Elasticsearch查找最近价格/数量的可能性。问题是我没有范围。我要实现的是,结果按最近距离排序。根据示例搜索查询,我的索引包含3个具有以下价格(数字)的文档:45、27、32 给定数字与我的搜索值29的“距离”为45-29 = 16 | 27-29 = -2 | 32-29 = 3,所以我希望搜索结果是按“距离”评分的,该数字距离给定价格不远。 搜索查询示例
问题内容: 我正在尝试查找具有Attribute的元素。好吧,我可以在Selenium中找到具有Id,tagName,Xpath和所有其他预定义方法的元素。但是,我正在尝试编写一种方法,该方法将给定属性名称和值作为输入专门返回WebElement。 假设XPath不是一个选择,还有其他更好的方法吗? 问题答案: 您可以使用CSS轻松完成此任务。 公式为: 所以如果有的话 您可以使用以下方法找到它:
我正在尝试查找具有属性的元素。我可以在Selenium中找到Id、tagName、Xpath和所有其他预定义方法的元素。但是,我正在尝试编写一个方法,专门返回WebElement,给定属性名和值作为输入。 假设XPath不是一个选项,还有其他更好的方法吗?
问题内容: 是否有numpy-thonic方法(例如函数)在数组中查找最接近的值? 例: 问题答案:
问题内容: 我试图找到没有jquery的具有特定标签名称的最接近的元素。当我单击a时,我想访问该表的。有什么建议吗?我读过有关偏移量的信息,但并不太了解。我应该只使用: 假设已经设置了单击元素 问题答案: 参加聚会的时间很少(非常),但是仍然如此。这应该做的伎俩:
问题内容: 我正在编写一个小程序,为了提高效率,我需要能够找到数组中最接近的纬度和经度。 假设您有以下代码: 我得到的结果是: 它应该是(在此示例中,列表中的最后一个对象) 我知道如何获取单个值的最接近单元格,但我想让lambda函数考虑这两个值,但我不确定如何做到。救命? 问题答案: 为了正确计算地球上各点之间的距离,您需要使用Haversine公式。使用此答案中提供的Python实现,您可以像