Конечно будет. Но есть некая разница между
if (target instanceof A) { ... }
if (target instanceof B) { ... }
if (target instanceof C) { ... }
if (target instanceof D) { ... }
if (target instanceof E) { ... }
if (target instanceof F) { ... }
if (target instanceof G) { ... }
и
classes
.filter(pair -> pair.first.isInstance(object))
.findFirst()
.ifPresent(pair -> pair.second.apply(object));
в том, что для этого тебе придется где-то объявить связи и кода-то меньше не станет. Добавь ко второму варианту
Map<Class, Function> map = new HashMap<>();
map.put(A.class, (args) -> ...))
map.put(B.class, (args) -> ...))
map.put(C.class, (args) -> ...))
map.put(D.class, (args) -> ...))
map.put(E.class, (args) -> ...))
map.put(F.class, (args) -> ...))
map.put(G.class, (args) -> ...))
(ну или список из Pair<Class, Function>, без разницы)
И это хорошо если у тебя аргументы совпадат, иначе сделаешь годобджект Context
в котором будет куча мусора. Нафига такое плодить?