代码之家  ›  专栏  ›  技术社区  ›  Joel

在两个部分不同的ArrayList之间传输数据

  •  1
  • Joel  · 技术社区  · 7 年前

    我用数据填充了两个类。 它们的结构都类似,并且两个类都包含一个ArrayList,该ArrayList具有 完全相同 结构作为另一个类的ArrayList。

    ArrayList被称为 t30 tB 他们的结构是 (BigDecimal, String) .查看 主要的 对于 new transactionB() new Transaction30() 事情会变得更清楚。

    我想做一个 “交易” 在这些ArrayList之间,移动(或复制&删除)ArrayList中的值( t30 ) 阵列列表( tB )

    交易:

    public class TransactionO{
        public ArrayList<TransactionB>tBpost = new ArrayList<TransactionB>();
        public TransactionO(/*constructor as seen in main...*/){/*stuff*/} ^
                                                //                         |
        public void addBPost(TransactionB b) { //                          |
            this.tBpost.add(b);               //adding ---------------------
        }
    }
    

    事务00:

    public class Transaction00 {
        public ArrayList<Transaction30>t30post = new ArrayList<Transaction30>();
        public Transaction00(/*constructor as shown below*/){/*stuff*/}    ^
                                                   //                      |
        public void add30Post(Transaction30 t30) {//                       |
            this.t30post.add(t30);               //adding ------------------
        }
    }  
    

    主要内容:

    TransactionO tO = null;
    Transaction00 t00 = null;
    private static List<TransactionO> allTransactionsIn = new ArrayList<TransactionO>();
    private static List<Transaction00> allTransactionsOut = new ArrayList<Transaction00>();
    //reading from file, parsing data, and finally storing the data in the class obj
    tO = new TransactionO(accountNumber,currency, paymentDate,currentAmount,transactionQty);
    tB = new TransactionB(amount,reference); //(BigDecimal, String)
    tO.addBPost(tB);
    // ^adding the class TransactionB into arraylist "tB" into TransactionO
    
    t00 = new Transaction00(accountNumberSend,clrNrSend);
    t30 = new Transaction30(amountSend,referenceSend); //(BigDecimal, String)
    t00.add30Post(t30);     
    // ^adding the class Transaction30 into arraylist "t30" into Transaction00
    
    //finally
    allTransactionsIn.add(tO);
    allTransactionsOut.add(t00);
    

    总结 : 在这些^ allTransaction*** ArrayList有不同的类对象,但结构相同的ArrayList (BigDecimal,字符串)

    arrayList的ASCII结构 allTransactionsOut :

    --------------------------------------------------------
    | t00 (constructor-values) | t00.t30 (arrayList-values) | --------------copy
    --------------------------------------------------------               |
    Structurally different ^   |  Structurally same ^ (BigDecimal, String) |
    

    arrayList的ASCII结构 allTransactionsIn :

    --------------------------------------------------------               |
    | tO (constructor-values) | tO.tB (arrayList-values)    |  <------------
    --------------------------------------------------------
    Structurally different ^  |  Structurally same ^ (BigDecimal, String)
    

    我该如何转移这些 arrayList-values 从一个列表到另一个列表?(不是 constructor-values )

    如果您需要进一步的解释,请随时询问。谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   Moose Morals    7 年前

    尽管 TransactionB Transaction30 两者碰巧都有类型为的字段 BigDecimal String ,Java认为它们没有关系。

    如果要在 ArrayList ,则需要确保这两种事务类型都继承自同一父级(要么扩展公共类型,要么实现公共接口)。

    e、 g。

    public abstract class ParentTransaction {
         protected BigDecimal value1
         protected String value2
    
         public ParentTransaction(BigDecimal value1, String value2) {
             this.value1 = value1;
             this.value2 = value2;
         }
    }
    
    public class TransactionB extends ParentTransaction {
       public TransactionB(BigDecimal amountSend, String referenceSend) {
           super(amountSend, referenceSend);
       }
       BigDecimal getAmountSend() {
           return value1;
       }
       String getReferenceSend() {
           return value2;
       }
    }
    
    public class Transaction30 extends ParentTransaction {
       public TransactionB(BigDecimal account, String reference) {
           super(account, reference);
       }
       BigDecimal getAccount() {
           return value1;
       }
       String getReference() {
           return value2;
       }
    }