的add (...)
方法應該有總結的稅收量,要做到這一點,就必須檢查是否新的交易與建立驗證符合邏輯。
的驗證應具有相同的:getCode(), getRate(), getIsFixed()
代碼片段添加:
public void add(SalesTransactionTax inputValue) {
SalesTransactionTax salesTransactionTax = checkInList(inputValue);
if (salesTransactionTax != null) {
// To sum operations the method used is add() from BigDecimal
salesTransactionTax.setTaxAmount(salesTransactionTax.getTaxAmount().add(inputValue.getTaxAmount()));
} else {
this.salesTransactionTaxList.add(inputValue);
}
}
要檢查是否存在在列表中的新SalesTransactionTax
你可以驗證使用filter()
方法從Java 8
代碼檢查驗證:
private SalesTransactionTax checkInList(SalesTransactionTax stt) {
return salesTransactionTaxList.stream()
// To compare String is used equals()
.filter(stt2 -> stt2.getCode().equals(stt.getCode()))
// To compare BigDecimal is used compareTo()
.filter(stt2 -> stt2.getRate().compareTo(stt.getRate()) == 0)
// To compare boolean is used ==
.filter(stt2 -> stt2.getIsFixed() == stt.getIsFixed())
// If doesn't exist return null
.findAny().orElse(null);
}
完整的示例:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class SalesTransactionTax {
private String code;
private BigDecimal rate;
private Boolean isFixed;
private BigDecimal taxAmount;
private List<SalesTransactionTax> salesTransactionTaxList = null;
public SalesTransactionTax(String code, BigDecimal rate, Boolean isFixed, BigDecimal taxAmount) { // NO_UCD
this.code = code;
this.rate = rate;
this.isFixed = isFixed;
this.taxAmount = taxAmount;
}
public SalesTransactionTax() {
this.salesTransactionTaxList = new ArrayList<>();
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public BigDecimal getRate() {
return rate;
}
public void setRate(BigDecimal rate) {
this.rate = rate;
}
public Boolean getIsFixed() {
return isFixed;
}
public void setFixed(Boolean fixed) {
isFixed = fixed;
}
public BigDecimal getTaxAmount() {
return taxAmount;
}
public void setTaxAmount(BigDecimal taxAmount) {
this.taxAmount = taxAmount;
}
public void add(SalesTransactionTax inputValue) {
SalesTransactionTax salesTransactionTax = checkInList(inputValue);
if (salesTransactionTax != null) {
// To sum operations the method used is add() from BigDecimal
salesTransactionTax.setTaxAmount(salesTransactionTax.getTaxAmount().add(inputValue.getTaxAmount()));
} else {
this.salesTransactionTaxList.add(inputValue);
}
}
private SalesTransactionTax checkInList(SalesTransactionTax stt) {
return salesTransactionTaxList.stream()
// To compare String is used equals()
.filter(stt2 -> stt2.getCode().equals(stt.getCode()))
// To compare BigDecimal is used compareTo()
.filter(stt2 -> stt2.getRate().compareTo(stt.getRate()) == 0)
// To compare boolean is used ==
.filter(stt2 -> stt2.getIsFixed() == stt.getIsFixed())
// If doesn't exist return null
.findAny().orElse(null);
}
public void print() {
salesTransactionTaxList.forEach(System.out::println);
}
@Override
public String toString() {
//Output formatted
DecimalFormat df = new DecimalFormat("#,###.000");
return code + ", " + df.format(new BigDecimal(String.valueOf(rate))) + ", " + isFixed + ", " + df.format(new BigDecimal(String.valueOf(taxAmount)));
}
public static void main(String[] args) {
SalesTransactionTax mergeTaxes = new SalesTransactionTax();
mergeTaxes.add(new SalesTransactionTax("VAT_1", BigDecimal.valueOf(5.000), true, BigDecimal.valueOf(1.100)));
mergeTaxes.add(new SalesTransactionTax("VAT_1", BigDecimal.valueOf(5.000), true, BigDecimal.valueOf(1.100)));
mergeTaxes.add(new SalesTransactionTax("VAT_2", BigDecimal.valueOf(9.000), true, BigDecimal.valueOf(2.200)));
mergeTaxes.add(new SalesTransactionTax("VAT_2", BigDecimal.valueOf(9.000), true, BigDecimal.valueOf(2.200)));
mergeTaxes.add(new SalesTransactionTax("VAT_2", BigDecimal.valueOf(9.000), true, BigDecimal.valueOf(2.200)));
mergeTaxes.add(new SalesTransactionTax("VAT_2", BigDecimal.valueOf(9.000), false, BigDecimal.valueOf(9.500)));
mergeTaxes.add(new SalesTransactionTax("VAT_3", BigDecimal.valueOf(7.000), true, BigDecimal.valueOf(1.000)));
mergeTaxes.print();
}
}
輸出:
VAT_1, 5.000, true, 2.200
VAT_2, 9.000, true, 6.600
VAT_2, 9.000, false, 9.500
VAT_3, 7.000, true, 1.000
什麼是'SampleModel'類? – Yahya
@Yahya這是我的錯誤 - 糾正。 – SiriusBits