Java 8 ici, bien que cette réponse devrait s'appliquer à tout lang.Levenshtein Algorithme de type distance pour différencier les objets en mémoire?
J'ai un problème où je dois comparer à des objets, disons, Widgets
et produire un « diff » entre eux: qui est, un ensemble de mesures qui, si elles sont suivies, transformera une Widget
(la source ) dans l'autre (cible).
class Widget {
// Properties and such.
}
class WidgetDiffer extends Differ<Widget> {
List<Transformation> diff(Widget source, Widget target) {
// The produced list will convert source to target, if executed
// by some runtime.
}
}
class WidgetTransformer extends Transformer<Widget> {
@Override
Widget transformSourceToTarget(Widget source, List<Transformation> transforms) {
// Somehow, run 'transforms' on 'source', which *should*
// produce an object with the same state/properties as
// the original target.
}
}
Je suis au courant de l'algorithme Levenshtein Distance pour les transformations des chaînes, mais:
- C'est juste pour les chaînes, pas
Widgets
; et - Il vous donne seulement un entier (nombre de transformations nécessaires pour transformer l'évier dans la cible), alors que je besoin d'un
List<Transformation>
qui, lorsqu'il est exécuté par un moteur, se source vers la cible
Je suis Je me demande s'il existe des algorithmes connus pour effectuer ce type d'opérations. Une chance que ces algorithmes vivent dans une bibliothèque quelque part?!?
Pouvez-vous convertir à la fois json ou xml et diff les chaînes? –
Merci @LanceJava (+1) - Je peux tout faire, je me demandais s'il y avait des algorithmes standard pour ce genre de chose, et espérer secrètement que quelqu'un dans l'espace JVM les ait déjà résolus/implémentés :-) – smeeb