注意:我将此数据存储到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);
输出:Order ID : 5, Zscore : -2.5
我可以使用上面的代码找到zscore,但是我想一次找到。那么,如何在一行中使用Java 8 /流找到最大OrderId的zscore?
有什么比我的代码更好的方法吗?
最佳答案
您可以使用max()
和Comparator
来映射最大的OrderId,并使用map
的Optional
映射zScore
。
double zscore = getOrderBook()
.entrySet()
.stream()
.filter(e -> e.getValue().getPairName().equals("AB")
&& e.getValue().getCompletedStatus().equals("InProgress")
&& e.getValue().getOrderType().equals("Buy"))
.max(Comparator.comparing(Entry::getKey))
.map(e -> e.getValue().getzScore())
.orElse(0);