java 关闭中断_终止或中断Java 8流循环

这篇博客探讨了在Java8中如何使用流进行数据处理,并在满足特定条件时退出循环。示例代码展示了如何从市场订单中匹配并执行卖出订单,同时正确地跳出循环。博主最终改用传统for循环来解决这个问题,以更有效地控制流程。
摘要由CSDN通过智能技术生成

我有一个Java 8流循环,其内容如下:

void matchSellOrder(Market market, Order sellOrder) {

System.out.println("selling " + market.pair() + " : " + sellOrder);

market.buyOrders()

.stream()

.filter(buyOrder -> buyOrder.price >= sellOrder.price)

.sorted(BY_ASCENDING_PRICE)

.forEach((buyOrder) -> {

double tradeVolume = Math.min(buyOrder.quantity, sellOrder.quantity);

double price = buyOrder.price;

buyOrder.quantity -= tradeVolume;

sellOrder.quantity -= tradeVolume;

Trade trade = new Trade.Builder(market, price, tradeVolume, Trade.Type.SELL).build();

CommonUtil.convertToJSON(trade);

if (sellOrder.quantity == 0) {

System.out.println("order fulfilled");

// break loop there

}

});

}

满足某些条件时如何跳出循环?什么是关闭流的正确方法呢?

更新

我滥用流技术,假设它是一个循环,不是为此而设计的。这是我使用下面提供的答案最终得到的代码:

List applicableSortedBuyOrders = market.buyOrders()

.stream()

.filter(buyOrder -> buyOrder.price >= sellOrder.price)

.sorted(BY_ASCENDING_PRICE)

.collect(toList());

for(Order buyOrder : applicableSortedBuyOrders){

double tradeVolume = Math.min(buyOrder.quantity, sellOrder.quantity);

double price = buyOrder.price;

buyOrder.quantity -= tradeVolume;

sellOrder.quantity -= tradeVolume;

Trade trade = new Trade.Builder(market, price, tradeVolume, Trade.Type.SELL).build();

CommonUtil.printAsJSON(trade);

if (sellOrder.quantity == 0) {

System.out.println("order fulfilled");

break;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值