【发布时间】:2018-12-10 17:39:38
【问题描述】:
我有下面想要转换为流的代码,在 parallelStream 或流中编写如此复杂的逻辑可能没有意义,但仍然想了解我们如何使用 lambda 表达式编写它。
for(PositionModel position :positionList)
{
StringBuffer line = new StringBuffer();
line.append(position.getInstrument());
line.append(CSV_SEPARATOR);
line.append(position.getAccount());
line.append(CSV_SEPARATOR);
line.append(position.getAccountType());
line.append(CSV_SEPARATOR);
List<TransactionModel> tranList = transactionMap.get(position.getInstrument());
int delta = 0;
if(tranList != null )
{
tranList.parallelStream().collect(Collectors.gr)
for(TransactionModel tran: tranList)
{
if(PositionCalcContant.BUY_INDICATOR.equals(tran.getTransactionType()))
{
if(PositionCalcContant.EXTERNAL.equals(position.getAccountType()))
{
delta += tran.getTransactionQuantity();
}
else
{
delta -= tran.getTransactionQuantity();
}
}
if(PositionCalcContant.SELL_INDICATOR.equals(tran.getTransactionType()))
{
if(PositionCalcContant.EXTERNAL.equals(position.getAccountType()))
{
delta -= tran.getTransactionQuantity();
}
else
{
delta += tran.getTransactionQuantity();
}
}
}
}
line.append(position.getQuantity()+delta);
line.append(CSV_SEPARATOR);
line.append(delta);
bw.write(line.toString());
bw.newLine();
position.setDelta(delta);
if(Math.abs(delta) > maxChange)
{
maxChange = delta;
maxChangeInstrument = position;
maxChangeInstrument.setDelta(delta);
}
if(Math.abs(delta) < minChange)
{
minChange = delta;
minChangeInstrument = position;
minChangeInstrument.setDelta(delta);
}
}
这里有 2 个循环我想将两者都转换为 lambda 或将内部循环转换为 lambda
【问题讨论】:
-
我认为这不适合流,因为会有副作用和其他事情发生。
-
至少是transactionList的内部循环?
标签: java lambda java-8 java-stream