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