亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更新列表中的現有對象

更新列表中的現有對象

長風秋雁 2023-09-13 10:45:32
問:我有一個包含多個貸款帳戶的 Bank 類(LoanAccount 類)。我創建了一個具有 CRUD 功能的 LoanAccountService 。我擔心的是我如何實現更新功能。銀行public class Bank {    private List<LoanAccount> loanAccounts;}貸款賬戶public class LoanAccount {    private String id;    private Integer numberOfInstallments;    private LoanAccountType type;    private Date creationDate;    private BigDecimal loanAmount;}服務public class LoanAccountService{    private Bank bank;    public LoanAccountService(Bank bank) {        this.bank = bank;    }    public LoanAccount update(LoanAccount loanAccount) {        Optional<LoanAccount> account = bank.getLoanAccounts()                .stream()                .filter(la -> la.getId().equals(loanAccount.getId()))                .findAny();        if (account.isPresent()) {            account.get().setCreationDate(loanAccount.getCreationDate());            account.get().setLoanAmount(loanAccount.getLoanAmount());            account.get().setNumberOfInstallments(loanAccount.getNumberOfInstallments());            account.get().setType(loanAccount.getType());        } else {            throw new IllegalArgumentException("The object does not exist.");        }        return loanAccount;    }}當使用包含 LoanAccounts 列表中已存在的 ID 的 LoanAccount 調用方法更新時,我想使用作為參數給出的對象 LoanAccount 來更新現有對象。以上是我的實現,但我覺得應該有更好的方法來做到這一點。
查看完整描述

3 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

使用 Builder 進行 getter 和 setter


public class LoanAccount {

    private String id;

    private Integer numberOfInstallments;


// add other properties


public String getId() {

    return id;

}


public LoanAccount setId(String id) {

    this.id = id;

    return this;

}


public Integer getNumberOfInstallments() {

    return numberOfInstallments;

}


public LoanAccount setNumberOfInstallments(Integer numberOfInstallments) {

    this.numberOfInstallments = numberOfInstallments;

    return this;

}

使用這個作為更新方法


public LoanAccount update(LoanAccount loanAccount) {

    return bank.getLoanAccounts()

            .stream()

            .filter(la -> la.getId().equals(loanAccount.getId()))

            .findFirst().orElseThrow(IllegalArgumentException::new)

            .setCreationDate(loanAccount.getCreationDate())

            .setLoanAmount(loanAccount.getLoanAmount())

            .setNumberOfInstallments(loanAccount.getNumberOfInstallments())

            .setType(loanAccount.getType());

}


查看完整回答
反對 回復 2023-09-13
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

  1. 你使用什么樣的持久層?

  2. 為什么需要遍歷所有銀行賬戶?

  3. 您是否從存儲庫中獲取了所有帳戶并在服務層上循環?如果是這樣為什么?

  4. 為什么不從存儲庫中獲取相應的單個記錄并更新?

  5. 為什么不使用查找和更新記錄而不是使用以上幾點呢?

    這些問題也許會給你一個想法。如果你回答的話?。。∪绻麤]有讓我們更深入地討論


查看完整回答
反對 回復 2023-09-13
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

您可以使用 HashMap,其中 TKey 是 LoanAccount.id 的類型。然后調用loanAccounts.put(id, object) This 將更新對象(如果已有 Id),如果沒有則添加新對象。


這是一種廉價、骯臟的方式。另一種方法是讓您的 LoanAccount 類實現Comparable并在compareTo()方法中進行基于 id 的比較。做同樣的事情來覆蓋你的equals(),你應該準備好了。


@Override

public boolean equals(object obj) {

    if (obj == null) return false;


    return ((LoanAccount)obj).getId() == this.getId();

}

類似的事情。(由內存編寫的代碼,可能有錯誤并且缺乏數據類型等驗證)


查看完整回答
反對 回復 2023-09-13
  • 3 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號