[英]HBASE: update the existing java object containing list via JAVA API
[英]update an existing object in list
问:我有一个包含多个贷款账户(LoanAccount 类)的银行 class。 我创建了一个具有 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 调用方法更新时,我想使用给定的 object loanAccount 作为参数更新现有的 object。
以上是我的实现,但我觉得应该有更好的方法来做到这一点。
将 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()); }
您可以使用 HashMap,其中 TKey 是 LoanAccount.id 的类型。 然后调用loanAccounts.put(id, object)
如果已经有一个Id,这将更新object,如果没有,则添加一个新的object。
这是一种廉价、肮脏的方式。 另一种方法是让您的 LoanAccount class 实现Comparable
并在compareTo()
方法中进行基于 id 的比较。 做同样的事情覆盖你的equals()
,你应该准备好go。
@Override
public boolean equals(object obj) {
if (obj == null) return false;
return ((LoanAccount)obj).getId() == this.getId();
}
类似的东西。 (由 memory 编写的代码,可能会出现错误并且缺少数据类型等验证)
您为什么不使用查找和更新记录而不是使用上述几点?
这些问题可能会给你一个想法。 如果你回答它! 如果不是让我们更深入地讨论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.