### 重複する期間が登録された際にエラーメッセージを表示する
Javaを勉強中です。
登録される期間が既に登録されている期間と重複している場合エラーメッセージを表示するバリデーションを
作成したいのですが現在のソースだと開始日と終了日が含まれず悩んでいます。
開始日と終了日を含むにはどのように改良すると良いのでしょうか。
現在
9/1~12/31
8/19/1 メッセージ表示されない9/2 メッセージ表示される
8/1
該当のソースコード
Java
1private ArrayList<Tax> taxList = new ArrayList<>(); 2 public void putTax(Tax tax) { 3 if (taxList.stream() 4 .anyMatch( 5 e -> e.getApplyStartDate().isBefore(tax.getApplyEndDate()) 6 && e.getApplyEndDate().isAfter(tax.getApplyStartDate()))) { 7 System.out.println("税率適用期間に重複があります。登録値を確認してください。"); 8 } 9 10 taxList.add(tax); 11 } 12
Java
1public class Tax { 2 private LocalDate applyStartDate; 3 private LocalDate applyEndDate; 4 private BigDecimal taxRate; 5 6 // setter 7 public void setApplyStartDate(LocalDate start) { 8 this.applyStartDate = start; 9 } 10 11 public void setApplyEndDate(LocalDate end) { 12 this.applyEndDate = end; 13 } 14 15 // Getter 16 17 public LocalDate getApplyStartDate() { 18 return this.applyStartDate; 19 } 20 21 public LocalDate getApplyEndDate() { 22 return this.applyEndDate; 23 } 24}
TaxにgetApplyStartDateやgetApplyEndDateがないので、コンパイルが通りません。コンパイルに必要なコードは全部含めて提示してください。
isBeforeとisAfterは、「より前」と「より後」だからダメなのではないですか?
https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDate.html
isBeforeの否定は該当日付を含みかつisAfterなのかも。isAfterの否定は該当日付を含み...。
> アノテーションの記載漏れがありましたので
Lombokは別にJava標準なものではないし、提示のコード中にも示されている訳でもないので、@Dataアノテーションを付けているからといってsetter、getterが自動生成、というのは読んだ者に伝わらないと思います。
ご指摘ありがとうございます。
>Lombokは別にJava標準なものではない
その通りだと思いましたのでsetterとGetter
を記載しました。
回答1件
あなたの回答
tips
プレビュー