重申来自内部流

时间:2017-07-27 20:16:58

标签: java java-8

Class Order{
List<Transaction> transactions
}

Class Transaction{
public String state;
public Long id;
public Long dateInMillis;
}

我正在寻找一种有效的方法来执行以下操作

我有一个订单列表,每个订单可以有多个交易。交易可以处于两种状态,即ACTIVE,COMPLETED(以及我们之间不关心的一堆状态)。对于每个订单,我们在启动流程时创建一个事务(ACTIVE),并在结束时创建另一个事务(COMPLETED)。我想用requestDate&amp ;;生成交易清单。完成日期。对于处于ACTIVE状态的事务,requestDate和Completion date是事务日期本身。对于处于COMPLETED状态的交易,requestDate是相应ACTIVE事务的日期,完成日期是当前事务的日期,即COMPLETED状态1.

例如两笔交易t1&amp; t2其中t1的状态为ACTIVE,t2的状态为COMPLETED。

    orders.stream()
    .forEach(order -> {
        order.getTransactions().stream().forEach(transaction -> {
        });

        ResultObject obj = new ResultObject();
        obj.setTransactionId(transaction.getId());

        if(transaction.getState()=="ACTIVE"){
            obj.setRequestDateInMillis(transaction.getDateInMillis);
            obj.setCompletionDateInMillis(transaction.getDateInMillis());
        }else if(transaction.getState()=="COMPLETED"){
            obj.setCompletionDateInMillis(transaction.getDateInMillis());

            TODO: find transaction for this order which is in ACTIVE state and set that time as RequestDate for current transaction
        }
    });             

1 个答案:

答案 0 :(得分:1)

    Transaction active, completed;
    for(Order o : listOfOrders){
        active = null, completed = null;
        for (Transaction t : o.transactions){
            if (t.state.equals("Active"))
                active = t;
            else if (t.state.equals("Completed"))
                completed = t;
            //break?
        }
        if (completed != null){

        }
        else if (active != null){

        }
        else{
            //Error
        }
    }

我认为在使用流之前,逻辑可以使用标准循环。之后,如果订单列表足够大(10K +),那么流可能会变得方便