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); });