読者です 読者をやめる 読者になる 読者になる

BiConsumer を比較処理の記述で使う

2つのオブジェクトを比較処理するものが大量にある時、if 文をたくさん書くのが嫌になり if文を隠ぺいして差がある時の処理を
Consumer と Biconsumer で書くことを考えた。

public static <T, U> boolean parse(T t, U u, Consumer<T> delete, Consumer<U> add, BiConsumer<T, U> modified){
  if (t==null || "".equals(t)){
     if (u != null && !"".equals(u)){
        add.accept(u);
        return true;
      }
   }else{
      if (u==null || "".equals(u)){
         delete.accept(t);
         return true;
      }else{
         if (!t.equals(u)){
            modified.accept(t, u);
            return true;
         }
      }
   }
   return false;
}

Tは、比較元、Uは比較先で、delete は削除時の Consumer 、add は追加時の Consumer
modified は変更時の BiConsumer である。

すると、こんな風に書ける。

boolean res = Difference.parse(old_str, new_str, o->{
    System.out.println("削除:" + o);
}, n->{
    System.out.println("追加:" + n);
}, (o, n)->{
    System.out.println("変更:" + o + " → " + n);
});