为了账号安全,请及时绑定邮箱和手机立即绑定

更新列表中的现有对象

更新列表中的现有对象

长风秋雁 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 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信