java使用流基于另一个字段计算属性
我有下面的代码,我想把它们转换成流,在parallelStream或stream中编写这样复杂的逻辑可能没有意义,但我仍然想了解我们如何用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);
}
}
这里有两个循环,我想把它们都转换成lambda,或者把内部循环转换成lambda
# 1 楼答案
我尝试了一些东西,并得出了以下结论:这是否比原始代码更糟糕/更好
此外,这只适用于我们正在计算delta的内部循环,就整体而言,即使我同意这太复杂,可能不值得