的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