gpt4 book ai didi

java - 如何使用 Java 8/Streams 在 HashMap 中找到具有某些条件的最大键?

转载 作者:行者123 更新时间:2023-12-01 14:06:27 25 4
gpt4 key购买 nike

假设我有以下数据:

enter image description here

问题:

  1. 我想找到最大 orderId 的 zscore,其中 Pair 是“AB”,OrderType 是“Buy”,状态是“InProgress”。

注意:我将此数据存储到 HashMap 中,名称为 orderBook,其中 Key 为 orderId,Value 为 OrderModel(PairName、OrderType、Status、zscore)。

解决方案 1:

    int maxOrderId = 0 ;
getOrderBook().entrySet().stream()
.filter(e -> e.getValue().getPairName().equals("AB")
&& e.getValue().getCompletedStatus().equals("InProgress")
&& e.getValue().getOrderType().equals("Buy"))
.forEach(o -> {
if (maxOrderId < o.getKey()) {
maxOrderId = o.getKey();
}
});

double zscore = getOrderBook().get(maxOrderId).getzScore();
System.out.println("Order ID :"+ maxOrderId +", Zscore :"+zscore);

输出:订单 ID:5,Zscore:-2.5

我可以使用上面的代码找到 zscore,但我想一次性找到。

那么如何在一行中使用 Java 8/流找到最大 OrderId 的 zscore?

有没有比我的代码更好的方法?

最佳答案

您正在寻找的是 max方法:

Optional<Entry<Long,Order>> maxIdEntry = getOrderBook()
.entrySet()
.stream()
.filter(/* your filter logic */)
.max(Comparator.comparing(Entry::getKey));

这会产生一个可选的,所以要么使用 isPresent()get()方法或 ifPresent(Consumer<T> consumer)结果处理方法

关于java - 如何使用 Java 8/Streams 在 HashMap 中找到具有某些条件的最大键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63612490/

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