vij*_*ayk 3 java performance java-8 java-stream
假设我有以下数据:
题 :
注意:我将此数据存储到 HashMap 中,名称为 orderBook,其中键为 orderId,值为 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);
Run Code Online (Sandbox Code Playgroud)
输出 : Order 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));
Run Code Online (Sandbox Code Playgroud)
这会产生一个 Optional,所以要么使用isPresent()andget()方法,要么使用ifPresent(Consumer<T> consumer)方法来处理结果
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |