Recommandation de l'opération set par Java (et compréhension de equals et hashCode)

Le but de cet article

Ceux qui veulent lire cet article

En lisant cet article, la scène de l'utilisation des connaissances qui naissent

Par exemple, il est possible de comparer facilement les différences dans les fichiers CSV. La même chose s'applique à la comparaison des différences des données de table.

Exemple d'environnement d'exécution de code

Java 11

Effet de l'opération de pose de béton

Un exemple d'opération de réglage est présenté ci-dessous.

論理積

排他的論理和

論理和

En plus de cela, des ensembles de différences peuvent également être obtenus.

Connaissances antérieures

Equivalence d'objet

Il existe deux types d'équivalence d'objet en Java:

Identité d'objet

En Java, l'identité peut être vérifiée en comparant des objets avec des adresses de référence avec ==.

Reference.java


Object object = new Object();
Object object2 = new Object();

object == object; // true
object == object2; // false

Equivalence d'objet

Les égaux de la classe Object dont tous les objets héritent L'équivalence peut être déterminée en remplaçant.

Equals.java


Object object = new Object();
Object object2 = new Object();

object.equals(object); // true
object.equals(object2); // false

Et une méthode appelée hashCode est profondément impliquée dans cet égal.

Fonctionnement de l'évaluation d'équivalence d'objet Java

Tout d'abord, jetons un coup d'œil à l'équivalent JavaDoc.

equals JavaDoc est égal à (à partir de Java8 Oracle HP)

Indique si cet objet est égal à d'autres objets. La méthode equals implémente l'équivalence avec des références d'objet non nulles

Exemple concret.java


object.equals(null); // false
  • Réflexif: pour les valeurs de référence non nulles x, x.equals (x) renvoie vrai.

Regardons chacun d'eux.

Égal à l'exigence: réfléchissant

  • Réflexif: pour les valeurs de référence non nulles x, x.equals (x) renvoie vrai.

Identique à celui illustré dans la section sur l'équivalence des objets.

Equals.java


object.equals(object); // true 

Exigence égale: symétrie

  • Symétrique: pour les valeurs de référence non nulles x et y, x.equals (y) renvoie vrai uniquement si y.equals (x) renvoie vrai.

Exemple concret.java


Object object = new Object();
Object object2 = object;

object.equals(object2); // true
object2.equals(object); // true

Égal aux exigences: transition

  • Pour les valeurs de référence non nulles x, y et z, x.equals (z) renvoie vrai si x.equals (y) renvoie vrai et y.equals (z) renvoie vrai. Si A = B et B = C, alors A = C.

Exemple concret.java


Object A = new Object();
Object B = A;
Object C = A;

object.equals(object2); // true
object2.equals(object3); // true
//Object2 sans comparaison.equals(object3)Semble retourner vrai.

Égal aux exigences: cohérence

  • Cohérent: plusieurs appels à x.equals (y) pour les valeurs de référence non nulles x et y Si les informations utilisées dans la comparaison d'égaux pour cet objet n'ont pas changé, elles retournent systématiquement true ou retournent systématiquement false.

Quel que soit le nombre d'exécutions de equals, si les objets sont équivalents, le même résultat sera renvoyé.

Exemple concret.java


object.equals(object); // true
object.equals(object); // true

Javadoc de l'objet # est égal à suite

La méthode equals de la classe Object implémente les relations d'équivalence des objets les plus comparables. Autrement dit, pour les valeurs de référence non nulles x et y, cette méthode renvoie vrai uniquement si x et y font référence au même objet (x == y est vrai).

En d'autres termes, les égaux de la classe Object elle-même dans l'exemple précédent

Exemple concret.java


object.equals(object2);

Est

Exemple concret.java


object == object2;

Sauf si la classe remplace égale, seule l'identité ci-dessus est vérifiée.

Pour String # est égal à

Par exemple, equals dans la classe java.lang.String renvoie true en premier si l'identité est confirmée, sinon elle vérifie l'équivalence. Fondamentalement, lors du remplacement, suivez le flux de vérification d'identité → vérification d'équivalence.

String#equals.java


    public boolean equals(Object anObject) {
        if (this == anObject) { //Vérification d'identité
            return true;
        }
        //Vérification d'équivalence
        if (anObject instanceof String) {
            String aString = (String)anObject;
            if (coder() == aString.coder()) {
                return isLatin1() ? StringLatin1.equals(value, aString.value)
                                  : StringUTF16.equals(value, aString.value);
            }
        }
        return false;
    }

Javadoc de l'objet # est égal à suite

Normalement, lors de la substitution de cette méthode, vous devez toujours remplacer la méthode hashCode et suivre la convention générale de la méthode hashCode ** «Les objets équivalents doivent contenir le code de hachage équivalent» **. Veuillez noter qu'il y a **.

Au fait, quelle est la règle générale [^ 1] de hasCode? En premier lieu, ne devrions-nous pas simplement remplacer la méthode d'égalité?

hashCode JavaDoc hashCode (à partir de Java8 Oracle HP)

Renvoie la valeur de code de hachage de l'objet. Cette méthode est prise en charge pour les avantages des tables de hachage, telles que les tables de hachage fournies par HashMap.

Hash est [Wikipedia: fonction de hachage](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96 % A2% E6% 95% B0) est détaillé.

Il exprime la clé d'identification des données. Continuez à lire le Javadoc.

Les règles générales de hashCode sont:

  • La méthode hashCode renvoie toujours le même entier chaque fois que le même objet est appelé plusieurs fois pendant l'exécution de l'application Java, à moins que les informations utilisées dans la comparaison ** equals pour cet objet aient changé. est nécessaire**. Cependant, il n'est pas nécessaire que cet entier soit le même pour chaque exécution de la même application.

Est-ce la même chose que la cohérence des égaux à l'étape précédente?

  • Si deux objets sont égaux selon la méthode * equals (Object) **, alors un appel à la ** méthode hashCode pour chacun des deux objets doit produire le même résultat entier **.
  • Si deux objets ne sont pas égaux selon la méthode equals (java.lang.Object), alors deux L'appel de la méthode hashCode pour chaque objet n'a pas à produire des résultats entiers différents. Cependant, les programmeurs constateront que la génération de résultats entiers différents pour des objets inégaux peut améliorer les performances des tables de hachage. ** "Les objets équivalents doivent contenir un code de hachage équivalent" **

Les propriétés des valeurs de retour de equals et hashCode pour l'équivalence et la non-équivalence des deux objets sont résumées ci-dessous.

Méthode Objet équivalent Objets non équivalents
hashCode Doit être équivalent Non équivalent recommandé.
* Il n'est pas nécessaire que ce soit non équivalent, mais il est recommandé pour les performances.
equals Devrait retourner vrai Devrait retourner faux

Conversation silencieuse

À présent, nous avons constaté que l'équivalence d'objet se compose à la fois d'égaux et de hashCode. Parmi les classes que nous créons, les cibles qui jugent l'équivalence et gèrent dans des collections telles que List, Map et Set sont considérées comme POJO (Plain Old Java Object). Parmi POJO, les données sont modélisées, c'est-à-dire DTO (Data Transfer Object), VO (Value Object), Entity (classe qui imite la structure de la table), certaines données avec des noms différents Dans l'expression de, l'équivalence est jugée par des égaux.

Choix de l'implémentation d'equals et de hashCode en Java

Equals et hashCode seront remplacés par POJO, mais il est prévu que les moyennes soient les suivantes.

  1. Implémentation par l'annotation @EqualsAndHashCode de la bibliothèque lombok
  2. Implémentation par la fonction de complétion de source de l'EDI telle qu'éclipse
  3. Implémentation du développeur

Pour 1 et 2, c'est une implémentation d'égaux qui vérifie que tous les champs de cette classe et de cette super classe ont la même valeur.

Concernant 3, il semble qu'une méthode qui vérifie la même valeur sera créée de la même manière, ou sera implémentée en fonction de circonstances particulières, mais cet article ne l'assume pas et ne le recommande pas. 1 semble être le représentant.

Reconfirmation de l'API de collecte avec prise en compte des égaux et du hashCode

Les objets equals et hashCode sont importants dans l'API de collection. Une fois encore, nous confirmerons l'implication d'equals et hashCode dans l'API Collection. Puisqu'il s'agit d'une introduction côté interface, veuillez vous référer à Javadoc et sélectionner la classe d'implémentation appropriée lors de son utilisation.

List

Fonctionnalité

Une interface de collecte avec une commande. Les classes d'implémentation sont les suivantes dans l'implémentation standard. Il existe des implémentations dans de nombreuses autres bibliothèques.

Ceux-ci sont implémentés en fonction des propriétés satisfaites par le Javadoc de l'interface List. Les détails d'implémentation sont différents pour chaque classe d'implémentation. Par exemple, LinkedList a un accès aléatoire lent (accès utilisant des indices), le fonctionnement des éléments tip / end est rapide et ArrayList a un accès aléatoire rapide. Ici, nous n'allons pas aborder la manière de sélectionner chaque classe d'implémentation.

Opération d'objet unique: contient

boolean contains(Object o) Renvoie true si l'élément spécifié est inclus dans cette liste. Autrement dit, il ne renvoie vrai que si cette liste contient un ou plusieurs éléments e qui sont (o == null? E == null: ** o.equals (e) **).

e est chaque élément de List. À la suite de la vérification de l'équivalence avec e dans o.equals, s'il y en a même un qui renvoie vrai, il renvoie vrai.

En d'autres termes, List contient ** utilise l'implémentation equals de l'objet passé **. Certaines API de collection utilisent l'égalité dans les opérations sur les éléments détenus par la collection.

Opération d'objet unique: supprimer

boolean remove(Object o) Si l'élément spécifié est dans cette liste, le premier est supprimé de la liste (opération facultative). Si l'élément ne figure pas dans cette liste, il ne sera pas modifié. Autrement dit, supprimez l'élément avec la plus petite valeur d'index i qui est (o == null? Get (i) == null: ** o.equals (get (i)) **) (tel élément S'il existe). Renvoie true si l'élément spécifié a été inclus dans cette liste (c'est-à-dire si cette liste a été modifiée à la suite d'un appel).

Identique à contient et dépend de l'implémentation de equals. Il décrit également la considération lorsque plusieurs objets sont égaux.

Manipulation d'objets agrégés: égal

boolean equals(Object o) Compare si l'objet spécifié est égal à cette liste. ** Renvoie vrai uniquement si l'objet spécifié est également une liste **, ** de même taille ** et que tous les éléments correspondants des deux listes sont égaux **. Les deux éléments e1 et e2 sont égaux s'ils sont (e1 == null? E2 == null: ** e1.equals (e2) **). Autrement dit, les deux listes sont définies comme ** égales si les mêmes éléments sont inclus dans le même ordre **. Cette définition garantit que la méthode equals fonctionne correctement avec différentes implémentations de l'interface List.

On peut voir que les égaux de List délèguent le traitement aux égaux de la classe d'élément que List elle-même possède.

Par exemple, la section listA.equals (listB) suivante est

StringListEquals.java


List<String> listA = List.of("A", "B", "C");
List<String> listB = List.of("A", "B", "C");

listA.equals(listB); // true

Par conséquent, true est renvoyé.

Opération d'objet d'agrégation: containsAll

boolean containsAll(Collection<?> c) Renvoie true si tous les éléments de la collection spécifiée sont inclus dans cette liste.

Une extension de contains qui renvoie true si la liste appelante contient tous les éléments de l'argument c (le résultat de contains est true).

En d'autres termes, il vérifie qu'un ensemble contient tous les ensembles spécifiés.

Opération d'objet d'agrégation: retentionAll

boolean retainAll(Collection<?> c) Conserve uniquement les éléments contenus dans la collection spécifiée dans cette liste (opération facultative). Autrement dit, il supprime tous les éléments non inclus dans la collection spécifiée de cette liste.

En d'autres termes, vous obtenez le produit d'un ensemble et d'un ensemble spécifié. Bien sûr, si aucun n'est inclus, la liste des appelants sera vide.

Opération d'objet d'agrégation: removeAll

boolean removeAll(Collection<?> c) Supprime tous les éléments de la collection spécifiée de cette liste (opération facultative).

Extension de remove.

Set

Fonctionnalité

Une collection sans éléments en double. Autrement dit, l'ensemble n'a pas de paire d'éléments e1 et e2 qui est ** e1.equals (e2) **, et n'a qu'un seul élément nul au plus. Comme son nom l'indique, cette interface modélise l'abstraction des ensembles en mathématiques.

Une classe de collection qui ne permet pas de conserver les éléments en double. Le jugement de duplication est indiqué en gras.

L'idée de la méthode est la même que celle de List. Voir Javadoc pour plus de détails.

SortedSet

Fonctionnalité

Un ensemble qui fournit un ordre global pour cet élément. L'ordre des éléments se fait selon son ordre naturel ou en utilisant le comparateur qui est généralement fourni lors de la construction d'un ensemble. L'itérateur d'ensemble parcourt l'ensemble dans l'ordre croissant des éléments. Certaines opérations supplémentaires sont fournies pour profiter de cette commande. (Cette interface est un ensemble et est similaire à SortedMap.)

Voici des notes spéciales [^ 2]

Pour qu'un ensemble de tri implémente correctement l'interface Set, l'ordre maintenu par cet ensemble de tri doit être cohérent avec les égaux, indépendamment du fait qu'un comparateur explicite soit fourni. Veuillez noter que vous ne devriez pas. (Voir l'interface Compareable ou Comparer pour la définition exacte de la cohérence avec equals.) En effet, l'interface Set est définie en fonction de l'opération equals, mais l'ensemble de tri est sa méthode compareTo ou Puisque nous utilisons la méthode compare pour effectuer toutes les comparaisons d'éléments, les deux éléments considérés comme équivalents par cette méthode sont les mêmes du point de vue du jeu de tri. Le comportement des ensembles de tri est bien défini même si leur ordre n'est pas cohérent avec les égaux, mais il n'est pas conforme aux conventions générales de l'interface Set.

SortedSet est une classe de collection qui contient des classes qui implémentent l'interface Comparable, Le compareTo implémenté dans Comparable doit être cohérent avec equals. En d'autres termes, si compareTo vaut 0 (l'ordre correspond), equals doit retourner true.

Article de référence Remarque parce que j'étais accro à TreeSet Composer (pour les débutants)

Map

Fonctionnalité

Classe de dictionnaire dite clé, valeur.

Opération d'objet d'agrégation: entrySet

public Set<Map.Entry<K,V>> entrySet() Renvoie une vue d'ensemble des mappages contenus dans cette carte. ** Puisque l'ensemble est lié à la carte, les modifications apportées à la carte seront reflétées dans l'ensemble **, et les modifications apportées à l'ensemble seront reflétées dans la carte **. Si la carte est modifiée pendant le processus itératif de l'ensemble, le résultat du processus itératif est indéfini (à l'exception de l'opération remove de l'itérateur lui-même ou de l'opération setValue sur l'entrée de carte retournée par l'itérateur). L'ensemble prend en charge la suppression d'éléments. Les opérations Iterator.remove, Set.remove, removeAll, retentionAll et clear suppriment le mappage correspondant de la carte. Il ne prend pas en charge les opérations add ou addAll.

Set \ <Map.Entry \ <K, V > > est disponible dans la boucle For Each. On montre qu'en acquérant tous les éléments de Map with Set, il devient possible d'opérer dans une unité set.

Manipulation d'objets agrégés: égal

boolean equals(Object o) Compare si l'objet spécifié est égal à cette carte. L'objet spécifié est également une carte et renvoie true si les deux cartes représentent le même mappage. Autrement dit, si m1.entrySet (). Equals (m2.entrySet ()), les deux cartes m1 et m2 représentent le même mappage. Cela garantit que la méthode equals fonctionne correctement même si l'interface Map est implémentée différemment.

Exemple de mise en œuvre de l'opération d'ensemble de béton Basic

thème

Définir A image.png

Ensemble B image.png

StringSetDiff.java



import java.util.HashSet;
import java.util.Set;

public class StringSetDiff {
    public static void main(String[] args) {
        Set<String> setA = Set.of("a","b","c");
        Set<String> setB = Set.of("b","c","d");

        //Ensemble de somme
        System.out.println("Ensemble de somme");
        Set<String> setAcopy = new HashSet<>(setA);
        Set<String> setBcopy = new HashSet<>(setB);
        setAcopy.addAll(setBcopy); //setB est ajouté au contenu de setA
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Ensemble de différences
        System.out.println("Ensemble de différences");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        setAcopy.removeAll(setBcopy); //Soustrayez setB du contenu de setA.
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Ensemble de produits
        System.out.println("Ensemble de produits");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        setAcopy.retainAll(setBcopy); //Laisser le contenu existant dans setA et setB dans setA
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Somme logique exclusive
        System.out.println("Ensemble de somme logique exclusif");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        Set<String> setAcopy2 = new HashSet<>(setA);
        //Obtenez d'abord l'ensemble de produits
        setAcopy.retainAll(setBcopy);
        //Exclure l'ensemble de produits de chaque ensemble
        setAcopy2.removeAll(setAcopy);
        setBcopy.removeAll(setAcopy);
        setAcopy2.addAll(setBcopy);
        setAcopy2.forEach(System.out::print);
    }
}


Ensemble de somme

Ajoutez l'ensemble B à l'ensemble A.

Prédiction des résultats d'exécution image.png  +  image.png  =  image.png

Ensemble de somme.java


        Set<String> setA = Set.of("a","b","c");
        Set<String> setB = Set.of("b","c","d");
        Set<String> setAcopy = new HashSet<>(setA);
        Set<String> setBcopy = new HashSet<>(setB);
        setAcopy.addAll(setBcopy); //Ensemble A + Ensemble B

Résultat d'exécution

abcd


Ensemble de différences

Soustraire l'ensemble B d'un ensemble A

Prédiction des résultats d'exécution image.png  -  image.png  =  image.png

Ensemble de différences.java


        Set<String> setA = Set.of("a","b","c");
        Set<String> setB = Set.of("b","c","d");
        Set<String> setAcopy = new HashSet<>(setA);
        Set<String> setBcopy = new HashSet<>(setB);
        setAcopy.removeAll(setBcopy); //Ensemble A-Ensemble B

Résultat d'exécution

a


Ensemble de produits

Obtenez les éléments dans les ensembles A et B.

Prédiction des résultats d'exécution image.png  ×  image.png  =  image.png

Ensemble de produits.java


        Set<String> setA = Set.of("a","b","c");
        Set<String> setB = Set.of("b","c","d");
        Set<String> setAcopy = new HashSet<>(setA);
        Set<String> setBcopy = new HashSet<>(setB);
        setAcopy.retainAll(setBcopy); //Définir A*Ensemble B

Résultat d'exécution

bc


Ensemble de somme logique exclusif

Obtenez un élément qui n'existe que dans l'ensemble A ou dans l'ensemble B.

Prédiction des résultats d'exécution image.png  XOR  image.png  =  image.png

Ensemble de somme logique exclusif.java


        Set<String> setA = Set.of("a","b","c");
        Set<String> setB = Set.of("b","c","d");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        Set<String> setAcopy2 = new HashSet<>(setA);
        //Obtenez d'abord l'ensemble de produits
        setAcopy.retainAll(setBcopy); //Définir A*Ensemble B
        //Exclure l'ensemble de produits de chaque ensemble
        setAcopy2.removeAll(setAcopy); //Définir A- (Définir A*Ensemble B)=Seul l'ensemble A existe
        setBcopy.removeAll(setAcopy); //Ensemble B- (Définir A*Ensemble B)=Seul l'ensemble B existe
        setAcopy2.addAll(setBcopy); //Définir A,Un ensemble qui n'existe que dans l'un des B

Résultat d'exécution

ad

Exemple de mise en œuvre d'une opération d'ensemble concrète Développement

Bibliothèque utilisée

build.gradle


dependencies {
    compile 'org.projectlombok:lombok:1.18.8'
    compile 'org.apache.commons:commons-lang3:3.7'

    compile 'org.slf4j:slf4j-api:1.7.25'
    compile 'ch.qos.logback:logback-classic:1.2.3'
}

Vérification des différences pour chaque objet

Classe à utiliser

Record.java


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.Comparator;
import java.util.UUID;


@Data
@EqualsAndHashCode
@ToString
@NoArgsConstructor
public class Record implements Comparable {
    private UUID primaryKey;
    private String name;
    private Integer age;

    //Pour rendre la sortie plus facile à voir
    @Override
    public int compareTo(Object o) {
        if (o instanceof Record) {
            //ordre croissant d'âge,nom ordre croissant
            Comparator<Record> comparator =
                    Comparator.comparing(Record::getAge).
                            thenComparing(Record::getName).
                            thenComparing(Record::getPrimaryKey);
            return comparator.compare(this, (Record) o);
        }
        return 0;
    }

    //Revenir à la classe d'enregistrement de la classe d'enregistrement pour la détection de changement décrite plus loin
    public Record(ModifiedRecord modifiedRecord) {
        try {
            BeanUtils.copyProperties(this, modifiedRecord);
        } catch (IllegalAccessException | InvocationTargetException  ex) {
            ex.printStackTrace();
        }
    }
    public Record(DeleteOrInsertRecord deleteOrInsertRecord) {
        try {
            BeanUtils.copyProperties(this, deleteOrInsertRecord);
        } catch (IllegalAccessException | InvocationTargetException ex) {
            ex.printStackTrace();
        }
    }
}

Une classe qui imite les enregistrements de table dits ordinaires. En implémentant Comparable, il est devenu nécessaire d'implémenter compareTo.

Précautions lors de la mise en œuvre de Comparable Les objets dont le résultat de compareTo est égal à 0 sont jugés équivalents même sur des collections avec un ordre TreeSet. Par conséquent, si vous ajoutez plusieurs objets qui renvoient 0 avec compareTo au TreeSet comme indiqué dans cet exemple, l'un d'eux disparaît. Dans la classe Record, le contrôle nul n'est pas effectué pour chaque champ, donc le contrôle nul est également requis pour l'opération réelle.

DeleteOrInsertRecord.java


import lombok.Data;

import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.UUID;

/**
 *Enregistrer pour détection nouvelle / supprimée.
 * <pre>
 *Ce VO implémente l'équivalence pour classer les maîtres nouveaux et supprimés.
 *La méthode d'égalité est utilisée pour déterminer l'équivalence{@code age, name}N'inclus pas.
 * </pre>
 */
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class DeleteOrInsertRecord {

    @EqualsAndHashCode.Include
    private UUID primaryKey;

    private Integer age;

    private String name;

    public DeleteOrInsertRecord(Record record) {
        try {
            BeanUtils.copyProperties(this, record);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

Une classe d'enregistrement qui effectue un jugement d'équivalence uniquement par ID.

ModifiedRecord.java


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.UUID;

/**
 *Enregistrer pour la mise à jour principale.
 * <pre>
 *Ce VO implémente l'équivalence pour classer les mises à jour principales.
 *La méthode d'égalité est utilisée pour déterminer l'équivalence{@code primaryKey}N'inclus pas.
 * </pre>
 */
@Data
@EqualsAndHashCode
@NoArgsConstructor
@ToString
public class ModifiedRecord {

    @EqualsAndHashCode.Exclude
    private UUID primaryKey;
    private Integer age;
    private String name;

    public ModifiedRecord(Record record) {
        try {
            BeanUtils.copyProperties(this, record);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
}

Une classe d'enregistrement qui effectue un jugement d'équivalence dans des champs autres que ID (nom, âge).

RecordPatternSample.java



import org.apache.commons.lang3.RandomUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.*;
import java.util.stream.Collectors;

/**
 *Exemple d'opération de jeu d'enregistrements
 */
public class RecordPatternSample {
    private Logger logger = LoggerFactory.getLogger(RecordPatternSample.class);

    enum ModifiedPattern {
        NEW,
        UPDATE,
        DELETE,
        NO_MODIFIED
    }

    //Je veux trier et sortir, donc activer Comparable implémenté dans Record avec TreeSet
    //Groupe d'enregistrement principal
    private SortedSet<Record> masterRecords = new TreeSet<>();
    //Demander un groupe d'enregistrements (données de mise à jour de l'enregistrement principal envoyées par une méthode)
    private SortedSet<Record> requestRecords = new TreeSet<>();

    public RecordPatternSample() {
        int totalSize = 100;
        while (masterRecords.size() < totalSize) {
            masterRecords.add(createRandomRecord());
        }

        int createSize = masterRecords.size();

        //La moitié du nombre de données existantes dans les données de demande
        int existsDataCount = createSize / 2;
        List<Record> createdList = masterRecords.stream().collect(Collectors.toList());
        while(requestRecords.size() < existsDataCount) {
            Record requestData = createRandomRecord();
            requestData.setPrimaryKey(createdList.get(requestRecords.size()).getPrimaryKey());
            requestRecords.add(requestData);
        }
        //L'autre moitié sera de nouvelles données (toujours nouvelles par UUID)
        while (requestRecords.size() < createSize) {
            requestRecords.add(createRandomRecord());
        }
    }

    public static void main(String[] args) {
        new RecordPatternSample().exec();
    }

    private void exec() {
        //Obtenez la somme définie pour l'impression
        //À ce stade, les objets équivalents (qui ne présentent pas d'intérêt pour ce processus car ce sont des données non mises à jour) sont combinés en un seul par Set.
        Set<Record> aPlusBSet = getPlusSet(masterRecords, requestRecords);

        //Sortie de liste préliminaire
        //Sur la base de l'ensemble de somme, les objets équivalents sont extraits du groupe d'enregistrements de base et demandent un groupe d'enregistrements et une sortie.
        logger.info("print Master , Request.");
        aPlusBSet.stream().forEach(e -> {
            Optional<Record> masterRecord = searchSameRecord(masterRecords, e);
            Optional<Record> requestRecord = searchSameRecord(requestRecords, e);

            ModifiedPattern modifiedPattern = getModifiedPattern(masterRecord, requestRecord);

            logger.info("{}\t master:{},\t request:{}",
                    modifiedPattern,
                    toString(masterRecord),
                    toString(requestRecord));
        });

        //Identifier les données nouvelles, supprimées, mises à jour et non mises à jour par calcul d'ensemble

        //Obtenez un ensemble qui n'existe que dans le groupe d'enregistrements de demande.
        //Request record group-Master record group = Données qui existent uniquement dans le groupe d'enregistrements de demande
        //Autrement dit, de nouvelles données
        Set<Record> newRecordSet = getSubtractSet(requestRecords, masterRecords);

        logger.info("Affichage de nouvelles données.");
        newRecordSet.forEach(e -> logger.info("new :{}", toString(Optional.of(e))));

        //Obtenez un ensemble qui n'existe que dans le groupe d'enregistrements principaux.
        //Groupe d'enregistrements de base - Groupe d'enregistrements de demande = Données qui existent uniquement dans le groupe d'enregistrements de base
        //Autrement dit, des données supprimées
        Set<Record> deleteRecordSet = getSubtractSet(masterRecords, requestRecords);
        logger.info("Affichage des données supprimées.");
        deleteRecordSet.forEach(e -> logger.info("delete :{}", toString(Optional.of(e))));

        //Obtenez le jeu d'enregistrements de base du produit et demandez des enregistrements
        //Groupe d'enregistrements maître (ID) x Groupe d'enregistrements de demande (ID) = groupe d'ID existant dans les deux
        //Groupe d'enregistrements maître (extrait par ID) x Groupe d'enregistrements de demande (extrait par ID) = Groupe de données avec le même ID des deux côtés
        //Autrement dit, les données de mise à jour
        Set<Record> updateRecordSet = getUpdateSet(masterRecords, requestRecords);
        logger.info("Affichage des données mises à jour.");
        updateRecordSet.forEach(e -> logger.info("update :{}", toString(Optional.of(e))));

        //Existe à la fois dans le groupe d'enregistrements principal et dans le groupe d'enregistrements de demande, et tous correspondent exactement
        Set<Record> noModifiedSet = getSameSet(masterRecords, requestRecords);
        logger.info("Affichage des données sans mise à jour.");
        noModifiedSet.forEach(e -> logger.info("no modified :{}", toString(Optional.of(e))));
    }

    /**
     *Obtenez le modèle de mise à jour principal
     *
     * @param masterRecord Enregistrement maître
     * @param requestRecord Demande d'enregistrement
     * @renvoyer le modèle de mise à jour principal
     */
    private ModifiedPattern getModifiedPattern(Optional<Record> masterRecord, Optional<Record> requestRecord) {

        if (masterRecord.isPresent() && requestRecord.isPresent()) {

            //En le remplaçant par ModifiedRecord
            //Vérifier l'équivalence hors PK et confirmer la présence ou l'absence de mise à jour
            ModifiedRecord masterModifiedRecord = new ModifiedRecord(masterRecord.get());
            ModifiedRecord requestModifiedRecord = new ModifiedRecord(requestRecord.get());

            if (masterModifiedRecord.equals(requestModifiedRecord)) {
                return ModifiedPattern.NO_MODIFIED;
            }

            return ModifiedPattern.UPDATE;
        }

        if (!masterRecord.isPresent()) {
            return ModifiedPattern.NEW;
        }

        if (!requestRecord.isPresent()) {
            return ModifiedPattern.DELETE;
        }

        throw new IllegalStateException();
    }

    /**
     *Trouver le même enregistrement de clé primaire dans Set
     *
     * @jeu de paramètres
     * @enregistrement de paramètre
     * @retour Enregistrement facultatif
     */
    private Optional<Record> searchSameRecord(Set<Record> set, Record e) {
        return set.stream().filter(t -> t.getPrimaryKey().equals(e.getPrimaryKey())).findFirst();
    }

    /**
     *Obtenez les chaînes UUID, age et name.
     *
     * @enregistrement de paramètre
     * @renvoie l'UUID, l'âge et le nom entre deux points
     */
    private String toString(Optional<Record> e) {
        if (!e.isPresent())
            return "nothing data";
        return e.map(e2 -> String.join(",", e2.getPrimaryKey().toString(), String.valueOf(e2.getAge()), e2.getName())).get();
    }

    /**
     *Obtenez l'ensemble de produits
     *
     * @ensemble de paramètres A ensemble A
     * @param setB set B
     * @retour ensemble de produits
     */
    private Set<Record> getUpdateSet(final Set<Record> setA, final Set<Record> setB) {
        SortedSet<Record> recordSetCopyA = new TreeSet<>(setA);
        SortedSet<Record> recordSetCopyB = new TreeSet<>(setB);

        //Obtenez la clé primaire pour l'ensemble de produits
        //Extraire les ID existant à la fois dans l'ensemble A et dans l'ensemble B
        Set<UUID> samePrimarySet = recordSetCopyA.stream()
                .filter(e -> recordSetCopyB.stream().anyMatch(b -> e.getPrimaryKey().equals(b.getPrimaryKey())))
                .map(Record::getPrimaryKey)
                .collect(Collectors.toSet());

        //A partir de l'ensemble A, les enregistrements qui correspondent aux ID des éléments de l'ensemble B sont extraits.
        Set<Record> filteredSetA = recordSetCopyA.stream()
                .filter(e -> samePrimarySet.contains(e.getPrimaryKey()))
                .collect(Collectors.toSet());
        Set<Record> filteredSetB = recordSetCopyB.stream()
                .filter(e-> samePrimarySet.contains(e.getPrimaryKey()))
                .collect(Collectors.toSet());

        //Ensemble A-Ensemble B
        filteredSetA.removeAll(filteredSetB);

        return filteredSetA;
    }

    /**
     *Obtenez l'ensemble de la somme.
     *
     * @ensemble de paramètres A ensemble A
     * @param setB set B
     * @return L'ensemble somme de l'ensemble A et de l'ensemble B
     */
    private Set<Record> getPlusSet(final SortedSet<Record> setA, final SortedSet<Record> setB) {
        SortedSet<Record> recordSetAcopy = new TreeSet<>(setA);
        SortedSet<Record> recordSetBcopy = new TreeSet<>(setB);

        recordSetAcopy.addAll(recordSetBcopy);

        return recordSetAcopy;
    }

    /**
     *Obtenez la différence.
     *
     * @ensemble de paramètres A ensemble A
     * @param setB set B
     * @retour ensemble A moins ensemble B
     */
    private Set<Record> getSubtractSet(SortedSet<Record> setA, SortedSet<Record> setB) {
        //Faire dépendre la spécification égale uniquement de la correspondance de clé primaire
        Set<DeleteOrInsertRecord> copyASet = setA.stream().map(DeleteOrInsertRecord::new).collect(Collectors.toSet());
        Set<DeleteOrInsertRecord> copyBSet = setB.stream().map(DeleteOrInsertRecord::new).collect(Collectors.toSet());

        //Exclure ceux dont les identifiants correspondent
        copyASet.removeAll(copyBSet);

        //Revenir à l'enregistrement d'origine
        Set<Record> aSetSubtractBSet = copyASet.stream().map(Record::new).collect(Collectors.toSet());

        return aSetSubtractBSet;
    }

    /**
     *Obtenez un ensemble égal où tous les éléments correspondent.
     *
     * @param setA Un ensemble
     * @jeu de paramètresB jeu de B
     * @return Ensemble équivalent dans lequel tous les éléments de l'ensemble A et de l'ensemble B correspondent
     */
    private Set<Record> getSameSet(SortedSet<Record> setA, SortedSet<Record> setB) {
        SortedSet<Record> recordSetAcopy = new TreeSet<>(setA);
        SortedSet<Record> recordSetBcopy = new TreeSet<>(setB);

        recordSetAcopy.retainAll(recordSetBcopy);

        return recordSetAcopy;
    }

    /**
     *Générez un enregistrement avec une valeur aléatoire.
     * <ul>
     * <li>id:UUID</li>
     * <li>Âge: 1 à 5</li>
     * <li>Nom: ichiro, jiro, saburo, shiro, goro,N'importe lequel des rokuro au hasard</li>
     * </ul>
     *
     * @renvoyer des enregistrements avec des valeurs aléatoires
     */
    Record createRandomRecord() {
        Record record = new Record();
        record.setPrimaryKey(UUID.randomUUID());
        record.setAge(RandomUtils.nextInt(1, 5));

        String[] names = new String[]{"ichiro", "jiro", "saburo", "shiro", "goro", "rokuro"};
        List<String> nameList = Arrays.asList(names);
        record.setName(nameList.get(RandomUtils.nextInt(1, nameList.size())));
        return record;
    }
}

Comparer les deux groupes d'enregistrements (groupe d'enregistrements maître, groupe d'enregistrements de demande), Une classe qui divise les observations en 4 modèles: nouveau, supprimé, mis à jour et pas de mise à jour.

Résultat d'exécution

> 21:39:19.529 [main] INFO recordPattern.RecordPatternSample - print Master , Request. 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - UPDATE master:893b4348-ebce-4c43-8a45-3250bd3fc726,1,goro, request:893b4348-ebce-4c43-8a45-3250bd3fc726,1,jiro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:9ff04fba-c802-4337-8bdb-aeab77c86f65,1,goro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - UPDATE master:f475429b-10cc-49bb-9279-921e641f3952,1,goro, request:f475429b-10cc-49bb-9279-921e641f3952,3,goro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:2471eb0a-40c4-4f7a-83ea-57bca0573726,1,goro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - UPDATE master:47d530b4-e88b-4bbe-a1db-0b3dc7e32773,2,jiro, request:47d530b4-e88b-4bbe-a1db-0b3dc7e32773,1,goro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:54e63a4b-17ec-4421-ba5d-6ab84301f298,1,goro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - UPDATE master:893b4348-ebce-4c43-8a45-3250bd3fc726,1,goro, request:893b4348-ebce-4c43-8a45-3250bd3fc726,1,jiro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:a01bcef7-31de-4e64-95bc-1a658910549a,1,jiro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bac23a4d-fbd9-4e01-974e-5b4133c1b595,1,rokuro, request:bac23a4d-fbd9-4e01-974e-5b4133c1b595,1,jiro 21:39:19.714 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:bdaf5968-2e33-48ac-81d2-365b5c5d7287,1,jiro 21:39:19.730 [main] INFO recordPattern.RecordPatternSample - NO_MODIFIED master:dada18a6-73e2-4eef-8c29-649fb24d8616,1,jiro, request:dada18a6-73e2-4eef-8c29-649fb24d8616,1,jiro 21:39:19.730 [main] INFO recordPattern.RecordPatternSample - UPDATE master:dca9c586-5f80-46f2-bcb8-f1d6aa7470a6,1,shiro, request:dca9c586-5f80-46f2-bcb8-f1d6aa7470a6,1,jiro 21:39:19.730 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:e00bdc64-39ca-4413-8ee5-4b6d8fa2d914,1,jiro 21:39:19.730 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:fcc587b0-b359-4f66-96df-9c89f5d73260,1,jiro 21:39:19.730 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0c5c1e69-c58c-41f9-9a78-ef9bfc58e416,1,jiro, request:0c5c1e69-c58c-41f9-9a78-ef9bfc58e416,4,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:24a08049-ef2e-4c9f-b934-e2fa8853bbd5,1,jiro, request:24a08049-ef2e-4c9f-b934-e2fa8853bbd5,3,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:2d1f1380-0072-45cd-9452-024e137f9c1e,2,goro, request:2d1f1380-0072-45cd-9452-024e137f9c1e,1,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:3ce5b826-0822-4c37-bf77-51a4b7468fd6,1,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:4d4a5b75-da44-475c-bccd-f3acb77d5e48,1,jiro, request:4d4a5b75-da44-475c-bccd-f3acb77d5e48,2,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:7112029b-7e91-43ce-858e-b5cd1a15d127,1,shiro, request:7112029b-7e91-43ce-858e-b5cd1a15d127,1,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:838c0aef-873f-42df-b393-03a0babd7cfa,1,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:8df9c1a1-b6db-4bc0-b7dd-510cd7a3f3ce,1,rokuro, request:8df9c1a1-b6db-4bc0-b7dd-510cd7a3f3ce,4,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:b923f1ab-7324-4fbf-a13a-c16eadc4af7e,1,rokuro, request:b923f1ab-7324-4fbf-a13a-c16eadc4af7e,3,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bac23a4d-fbd9-4e01-974e-5b4133c1b595,1,rokuro, request:bac23a4d-fbd9-4e01-974e-5b4133c1b595,1,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c2941487-0185-46b0-8117-c4817bfe5147,1,saburo, request:c2941487-0185-46b0-8117-c4817bfe5147,1,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:e1754cc1-56c4-4e36-964d-1ab839bd2846,1,rokuro, request:e1754cc1-56c4-4e36-964d-1ab839bd2846,4,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:ebaeb8c4-949f-4731-b803-5836b340a875,1,rokuro, request:ebaeb8c4-949f-4731-b803-5836b340a875,2,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:291129c5-30ad-4a58-9861-364790f0a637,1,rokuro, request:291129c5-30ad-4a58-9861-364790f0a637,3,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:32ce3fe9-cf1d-4e60-b6e3-e54404063cb6,1,rokuro, request:32ce3fe9-cf1d-4e60-b6e3-e54404063cb6,2,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:57eab0b5-0cab-4982-9a99-15c1e54bb67d,2,shiro, request:57eab0b5-0cab-4982-9a99-15c1e54bb67d,1,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:8b37364d-e442-424b-b8df-e36e3fb30f2b,2,saburo, request:8b37364d-e442-424b-b8df-e36e3fb30f2b,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:a3273975-9147-4145-a600-dc111d2b3600,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:a59b47ca-0233-49f6-ac27-4748687ef0a6,1,saburo, request:a59b47ca-0233-49f6-ac27-4748687ef0a6,2,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bc6193a2-1702-480f-93ac-78b12e9a93dc,1,saburo, request:bc6193a2-1702-480f-93ac-78b12e9a93dc,2,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c2941487-0185-46b0-8117-c4817bfe5147,1,saburo, request:c2941487-0185-46b0-8117-c4817bfe5147,1,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c8d1d9fe-7550-48cf-b568-110644075e19,1,saburo, request:c8d1d9fe-7550-48cf-b568-110644075e19,4,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:02686803-4b17-4c0a-914e-ab04ba84e560,1,saburo, request:02686803-4b17-4c0a-914e-ab04ba84e560,3,rokuro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:0dc33f79-6308-47a8-bd06-08ac6c8fc185,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:15f73130-7a5e-41cc-b43f-0910fbfe9429,2,goro, request:15f73130-7a5e-41cc-b43f-0910fbfe9429,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:1bd7b5e3-cf7b-47fb-b995-19877f05af44,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:25ce82f5-d45b-4779-98f1-d0c16fad6594,1,saburo, request:25ce82f5-d45b-4779-98f1-d0c16fad6594,2,goro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:74c8a2e7-dd4f-4cfb-838f-32e62f799c2e,1,saburo, request:74c8a2e7-dd4f-4cfb-838f-32e62f799c2e,4,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:7bc84c8f-9c5b-4342-805d-ad286cf7941a,1,saburo 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:83245858-ff8f-4426-8462-c791e44e0f3c,2,shiro, request:83245858-ff8f-4426-8462-c791e44e0f3c,1,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:888744f4-0f49-4f01-8506-ab063ce2f778,1,shiro, request:888744f4-0f49-4f01-8506-ab063ce2f778,2,goro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:a31e9986-5bfe-44de-977d-33ca4c3848ef,1,shiro, request:a31e9986-5bfe-44de-977d-33ca4c3848ef,3,jiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:b74d351a-f038-4f7c-b718-3705dc71e07d,2,goro, request:b74d351a-f038-4f7c-b718-3705dc71e07d,1,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c97bf082-d689-43e9-bee5-f1c28274d138,2,goro, request:c97bf082-d689-43e9-bee5-f1c28274d138,1,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:dc04d992-baf5-42ea-8d68-3e7bb7beda3f,1,shiro 21:39:19.745 [main] INFO recordPattern.RecordPatternSample - UPDATE master:dca9c586-5f80-46f2-bcb8-f1d6aa7470a6,1,shiro, request:dca9c586-5f80-46f2-bcb8-f1d6aa7470a6,1,jiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:dfe53792-5b82-4338-8e4e-510e1e5099ef,3,goro, request:dfe53792-5b82-4338-8e4e-510e1e5099ef,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:003ab2ed-be1d-4387-8e09-80f85bd54352,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:05a10afa-ffa8-4d23-b686-14d4325c3917,1,shiro, request:05a10afa-ffa8-4d23-b686-14d4325c3917,2,rokuro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0cc04ce6-5698-4b38-9f3b-1d429c4f57e7,2,jiro, request:0cc04ce6-5698-4b38-9f3b-1d429c4f57e7,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:168d5fe9-e369-4d3d-956b-e9faa6c91a25,1,shiro, request:168d5fe9-e369-4d3d-956b-e9faa6c91a25,2,goro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:30752912-5d69-42a8-8892-907972b2430e,1,shiro, request:30752912-5d69-42a8-8892-907972b2430e,4,saburo 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:3a67008e-7fa2-496b-b50c-341eb7e4fb18,1,shiro, request:3a67008e-7fa2-496b-b50c-341eb7e4fb18,2,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:4bbaef48-a19c-4315-ba80-77437a7cc7ec,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:596aad9c-6fdd-4332-b36e-70573b2533fa,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:65bf8b3d-bcb8-45d1-b8eb-8ea6ad3f5a91,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:6bd5f5f2-154a-435f-a43d-49d013023a10,2,shiro, request:6bd5f5f2-154a-435f-a43d-49d013023a10,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:6fe7ae99-e991-4846-8e39-67c733d667d8,1,shiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:7112029b-7e91-43ce-858e-b5cd1a15d127,1,shiro, request:7112029b-7e91-43ce-858e-b5cd1a15d127,1,jiro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:888744f4-0f49-4f01-8506-ab063ce2f778,1,shiro, request:888744f4-0f49-4f01-8506-ab063ce2f778,2,goro 21:39:19.761 [main] INFO recordPattern.RecordPatternSample - UPDATE master:b74d351a-f038-4f7c-b718-3705dc71e07d,2,goro, request:b74d351a-f038-4f7c-b718-3705dc71e07d,1,shiro 21:39:19.767 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c97bf082-d689-43e9-bee5-f1c28274d138,2,goro, request:c97bf082-d689-43e9-bee5-f1c28274d138,1,shiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:d0c4e7af-dde1-4c94-a047-600721215303,2,goro, request:d0c4e7af-dde1-4c94-a047-600721215303,2,rokuro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:e4e92eb9-0c4f-483b-91ac-ef2132da6294,2,jiro, request:e4e92eb9-0c4f-483b-91ac-ef2132da6294,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:15f73130-7a5e-41cc-b43f-0910fbfe9429,2,goro, request:15f73130-7a5e-41cc-b43f-0910fbfe9429,1,saburo 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:168d5fe9-e369-4d3d-956b-e9faa6c91a25,1,shiro, request:168d5fe9-e369-4d3d-956b-e9faa6c91a25,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:25ce82f5-d45b-4779-98f1-d0c16fad6594,1,saburo, request:25ce82f5-d45b-4779-98f1-d0c16fad6594,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:2d1f1380-0072-45cd-9452-024e137f9c1e,2,goro, request:2d1f1380-0072-45cd-9452-024e137f9c1e,1,jiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:59a19a25-bc2a-446f-9f0a-ac11a02936ee,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:629d6a24-9108-409f-b6bd-d1e72f0f8205,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:74ed8852-6d6a-40e0-8923-a71023f72e6c,2,goro, request:74ed8852-6d6a-40e0-8923-a71023f72e6c,2,shiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:90a23d6d-7f76-4a01-b317-b5fccc10d8a0,2,jiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:9cbd1993-bf0f-48b6-89e7-78fd0bb7c94c,2,jiro, request:9cbd1993-bf0f-48b6-89e7-78fd0bb7c94c,3,shiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:aa74296f-073b-488d-99be-3471695d9632,2,jiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:b8478d6c-d8fc-4d2d-a7cd-26f9575d3795,2,jiro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:e4e92eb9-0c4f-483b-91ac-ef2132da6294,2,jiro, request:e4e92eb9-0c4f-483b-91ac-ef2132da6294,2,goro 21:39:19.769 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0cc04ce6-5698-4b38-9f3b-1d429c4f57e7,2,jiro, request:0cc04ce6-5698-4b38-9f3b-1d429c4f57e7,1,shiro 21:39:19.777 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:1e5aad3a-a688-48e1-b777-fb09561c0876,2,jiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:47d530b4-e88b-4bbe-a1db-0b3dc7e32773,2,jiro, request:47d530b4-e88b-4bbe-a1db-0b3dc7e32773,1,goro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:9e73f7d1-de2a-4ad0-9b16-a225001c1a5d,2,rokuro, request:9e73f7d1-de2a-4ad0-9b16-a225001c1a5d,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:d0c4e7af-dde1-4c94-a047-600721215303,2,goro, request:d0c4e7af-dde1-4c94-a047-600721215303,2,rokuro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:f8625d47-4183-4693-a4b4-048abe92e190,2,rokuro, request:f8625d47-4183-4693-a4b4-048abe92e190,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:05a10afa-ffa8-4d23-b686-14d4325c3917,1,shiro, request:05a10afa-ffa8-4d23-b686-14d4325c3917,2,rokuro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0ece9e7f-ed59-49cf-b5d0-20baf8deab78,2,rokuro, request:0ece9e7f-ed59-49cf-b5d0-20baf8deab78,3,goro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:2eb116e0-afe4-4c30-a562-82c28b33e0ca,2,saburo, request:2eb116e0-afe4-4c30-a562-82c28b33e0ca,2,rokuro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:6fcef8cf-a3c3-4581-8218-71feaa86eadf,2,rokuro, request:6fcef8cf-a3c3-4581-8218-71feaa86eadf,4,jiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:8b37364d-e442-424b-b8df-e36e3fb30f2b,2,saburo, request:8b37364d-e442-424b-b8df-e36e3fb30f2b,1,saburo 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:a95c1a23-1720-45ae-8ab1-a50029c4cd49,2,saburo 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bc6193a2-1702-480f-93ac-78b12e9a93dc,1,saburo, request:bc6193a2-1702-480f-93ac-78b12e9a93dc,2,saburo 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:2eb116e0-afe4-4c30-a562-82c28b33e0ca,2,saburo, request:2eb116e0-afe4-4c30-a562-82c28b33e0ca,2,rokuro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:83245858-ff8f-4426-8462-c791e44e0f3c,2,shiro, request:83245858-ff8f-4426-8462-c791e44e0f3c,1,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:9e73f7d1-de2a-4ad0-9b16-a225001c1a5d,2,rokuro, request:9e73f7d1-de2a-4ad0-9b16-a225001c1a5d,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:a59b47ca-0233-49f6-ac27-4748687ef0a6,1,saburo, request:a59b47ca-0233-49f6-ac27-4748687ef0a6,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bd6151b8-70f2-40f2-b6e2-8c25a861ca99,2,shiro, request:bd6151b8-70f2-40f2-b6e2-8c25a861ca99,4,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:d8207ec8-8a19-44de-a156-0e68c33e2a35,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:e1ec3242-3de6-4e85-873f-a1c0ea7abfe5,2,shiro 21:39:19.779 [main] INFO recordPattern.RecordPatternSample - UPDATE master:ebaeb8c4-949f-4731-b803-5836b340a875,1,rokuro, request:ebaeb8c4-949f-4731-b803-5836b340a875,2,shiro 21:39:19.787 [main] INFO recordPattern.RecordPatternSample - UPDATE master:f8625d47-4183-4693-a4b4-048abe92e190,2,rokuro, request:f8625d47-4183-4693-a4b4-048abe92e190,2,shiro 21:39:19.787 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:317663cd-2348-416d-b0d5-99aa379dffc9,2,shiro 21:39:19.787 [main] INFO recordPattern.RecordPatternSample - UPDATE master:32ce3fe9-cf1d-4e60-b6e3-e54404063cb6,1,rokuro, request:32ce3fe9-cf1d-4e60-b6e3-e54404063cb6,2,shiro 21:39:19.787 [main] INFO recordPattern.RecordPatternSample - UPDATE master:3a67008e-7fa2-496b-b50c-341eb7e4fb18,1,shiro, request:3a67008e-7fa2-496b-b50c-341eb7e4fb18,2,shiro 21:39:19.787 [main] INFO recordPattern.RecordPatternSample - NO_MODIFIED master:3dd86959-d1c6-4e91-bdc8-be20e4ac7cdc,2,shiro, request:3dd86959-d1c6-4e91-bdc8-be20e4ac7cdc,2,shiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:4d4a5b75-da44-475c-bccd-f3acb77d5e48,1,jiro, request:4d4a5b75-da44-475c-bccd-f3acb77d5e48,2,shiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:57eab0b5-0cab-4982-9a99-15c1e54bb67d,2,shiro, request:57eab0b5-0cab-4982-9a99-15c1e54bb67d,1,rokuro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:6bd5f5f2-154a-435f-a43d-49d013023a10,2,shiro, request:6bd5f5f2-154a-435f-a43d-49d013023a10,1,shiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:74ed8852-6d6a-40e0-8923-a71023f72e6c,2,goro, request:74ed8852-6d6a-40e0-8923-a71023f72e6c,2,shiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:dfe53792-5b82-4338-8e4e-510e1e5099ef,3,goro, request:dfe53792-5b82-4338-8e4e-510e1e5099ef,1,shiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:f475429b-10cc-49bb-9279-921e641f3952,1,goro, request:f475429b-10cc-49bb-9279-921e641f3952,3,goro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0ece9e7f-ed59-49cf-b5d0-20baf8deab78,2,rokuro, request:0ece9e7f-ed59-49cf-b5d0-20baf8deab78,3,goro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:10273738-2d41-4584-93f8-4554d5cdd015,3,goro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:116120a9-10f4-4e6e-bcec-45dd382d2ede,3,goro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:5f28cf17-a204-4935-8b1b-429eee8eb327,3,goro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:620fee15-0f18-4d13-9cd9-5adf8cae2a41,3,goro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:64b846e5-9a4b-4b47-a2a6-601189a3bbbc,3,goro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:81c4700d-6030-4569-aa83-6a1312d3032e,3,jiro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:823ead11-9213-40a4-8699-7cdd21a67825,3,jiro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:a31e9986-5bfe-44de-977d-33ca4c3848ef,1,shiro, request:a31e9986-5bfe-44de-977d-33ca4c3848ef,3,jiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:a385fb96-0cc4-4eb9-a0bd-8b99c3733f3f,3,jiro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:cb7ad23a-4e86-46c7-8bd8-c1d9002cd01f,3,jiro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:ce762caf-eef8-4d07-805e-a8dad4755be6,3,jiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:6958f6a4-ad80-40eb-b80a-554e1e76e516,3,jiro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:9149e643-7a0b-4aea-bbe3-9f32474747d2,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:a5f685e5-8cfa-4b42-a3f3-4beed0495a6d,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:a62e2530-8892-49fe-a2b7-90dcfe6a1a94,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:b923f1ab-7324-4fbf-a13a-c16eadc4af7e,1,rokuro, request:b923f1ab-7324-4fbf-a13a-c16eadc4af7e,3,rokuro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - UPDATE master:02686803-4b17-4c0a-914e-ab04ba84e560,1,saburo, request:02686803-4b17-4c0a-914e-ab04ba84e560,3,rokuro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:039f10e0-2325-4453-9b85-592cfb4dfacf,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:27a9c03c-7c3e-4bca-a7cf-5205b9ed064b,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:476e5888-2812-48e6-b74b-9f144fb08af3,3,rokuro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:60a5f406-9df8-4d4b-98cb-2e42480aa757,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:68d10177-abd7-4d20-a422-bf2073924448,3,rokuro 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:6b8a6a5f-fdbb-4e80-8d00-b81ecce590a3,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:6cd08a93-5cad-4ba5-acc5-1a027ba67a6b,3,rokuro, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:8c6a8e46-b65c-4209-b84a-5bd75f26d74b,3,saburo, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:abf89771-659a-4a26-927c-ac085851806e,3,saburo, request:nothing data 21:39:19.790 [main] INFO recordPattern.RecordPatternSample - DELETE master:ac67cc40-ec81-4553-baa9-04ba9ecbf516,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:b5997fc1-3009-48ca-a8d9-33656f59b8bc,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:bc2bd2e8-9f11-49c8-ac2e-1bf2de099ce2,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:bd4fec8e-ccc0-4e71-9cab-ee10cc859d80,3,saburo 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:cd13459f-f74d-430f-994f-47755c6a61fc,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:cf6e53cb-2f85-4ceb-b229-f4f5ac685914,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:e2c9bea6-bce5-498f-9a7c-90e15fad5b24,3,saburo, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - UPDATE master:24a08049-ef2e-4c9f-b934-e2fa8853bbd5,1,jiro, request:24a08049-ef2e-4c9f-b934-e2fa8853bbd5,3,saburo 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:72dc67f6-1fc4-4e5f-ba48-54ad5ffbe80e,3,saburo 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - DELETE master:95d8fcf0-856f-4376-abda-9d1a0f518e52,3,shiro, request:nothing data 21:39:19.798 [main] INFO recordPattern.RecordPatternSample - UPDATE master:9cbd1993-bf0f-48b6-89e7-78fd0bb7c94c,2,jiro, request:9cbd1993-bf0f-48b6-89e7-78fd0bb7c94c,3,shiro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:bd67860c-eb96-41e9-92bf-dc3042bcc163,3,shiro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:ccf4e3c0-6eea-46f7-8b5b-dea70315f1fe,3,shiro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:e18557e4-8b84-4cc3-bae8-a0bc60235c56,3,shiro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:26569d30-fb2f-470e-b3a9-d47d3e02b621,3,shiro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - UPDATE master:291129c5-30ad-4a58-9861-364790f0a637,1,rokuro, request:291129c5-30ad-4a58-9861-364790f0a637,3,shiro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:63631afd-433e-4620-a401-f423c852bcfb,3,shiro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:6f44b1f9-d29f-4c07-bdc7-9554dc14ee97,3,shiro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:7c296fbf-9b80-4f52-b298-2354d0a60a98,3,shiro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:80fd1211-f1d8-4498-ab65-c12682cac4d4,4,goro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:8d717a19-6e65-46f3-ab8e-a02be65b40cc,4,goro 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:10dbfb93-c762-4557-83a4-b4e8fce3b57a,4,goro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - DELETE master:3ac1d4ac-9ef2-454b-a0b5-7b70f0a37bd7,4,goro, request:nothing data 21:39:19.800 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:b347ad72-4951-428c-a417-9e8ec3be7bd3,4,jiro 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:c2bc4e1c-ac98-489c-8522-4fcf49f95965,4,jiro 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - DELETE master:d8e0bb66-f99f-41a6-a726-2cc6026966ea,4,jiro, request:nothing data 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:e91e2c80-16da-43c2-8786-3c636ab52fd9,4,jiro 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - DELETE master:f551e46b-ad4c-475d-b68f-b55b1b699a82,4,jiro, request:nothing data 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - UPDATE master:0c5c1e69-c58c-41f9-9a78-ef9bfc58e416,1,jiro, request:0c5c1e69-c58c-41f9-9a78-ef9bfc58e416,4,jiro 21:39:19.808 [main] INFO recordPattern.RecordPatternSample - UPDATE master:6fcef8cf-a3c3-4581-8218-71feaa86eadf,2,rokuro, request:6fcef8cf-a3c3-4581-8218-71feaa86eadf,4,jiro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:766966b8-c212-4336-ba34-e392754ddc1a,4,jiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:7724e31f-268b-4aac-b755-61f048483a13,4,jiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:972c8872-8328-489f-b842-de590834f907,4,rokuro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:a284f196-84a4-4f2f-9828-3e0158857c75,4,rokuro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:c219c4a3-bd78-4c1d-84ca-26b87e0b3723,4,rokuro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:c8d1d9fe-7550-48cf-b568-110644075e19,1,saburo, request:c8d1d9fe-7550-48cf-b568-110644075e19,4,rokuro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:124f781b-b2c5-4b41-b9d7-1e450187dc36,4,rokuro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:4a21ce3f-b0a9-4c74-8cf4-c6b084067440,4,rokuro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:5d14ab31-84ec-47c7-8bee-6a8f6afa3f59,4,rokuro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:6a231e9e-7e1c-41bd-8578-bfc8aeb74828,4,rokuro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:9b962555-d358-4472-9bca-ec304e7358a9,4,saburo, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:e5063475-63d3-4aac-ab4c-228ee626717a,4,saburo, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:1afaeffc-88c4-4b13-829d-7e2b576fe89f,4,saburo 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:30752912-5d69-42a8-8892-907972b2430e,1,shiro, request:30752912-5d69-42a8-8892-907972b2430e,4,saburo 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:5f2b0b16-1384-4fa8-b4df-81796e3424d7,4,saburo 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:74c8a2e7-dd4f-4cfb-838f-32e62f799c2e,1,saburo, request:74c8a2e7-dd4f-4cfb-838f-32e62f799c2e,4,saburo 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:8df9c1a1-b6db-4bc0-b7dd-510cd7a3f3ce,1,rokuro, request:8df9c1a1-b6db-4bc0-b7dd-510cd7a3f3ce,4,shiro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:a8a64c80-1421-4227-8048-e5d1d3060b26,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:b4611046-a331-477c-8379-c3de6f225c6e,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - NEW master:nothing data, request:b8e7dc78-06ac-429a-83f6-d8ea99269b74,4,shiro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:bd6151b8-70f2-40f2-b6e2-8c25a861ca99,2,shiro, request:bd6151b8-70f2-40f2-b6e2-8c25a861ca99,4,shiro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:cc758d94-b5c8-415c-94e9-29647e498995,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - UPDATE master:e1754cc1-56c4-4e36-964d-1ab839bd2846,1,rokuro, request:e1754cc1-56c4-4e36-964d-1ab839bd2846,4,shiro 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:ea5c2f0f-05e4-42ea-8088-8a86961ddc64,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:05cc34a7-9673-4da7-b4a7-1a504a94a6fb,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:181a298d-96e1-4a21-aad0-7caa2cadaaa9,4,shiro, request:nothing data 21:39:19.810 [main] INFO recordPattern.RecordPatternSample - DELETE master:6a85ae1b-2d78-4397-b46b-8d7ab4652711,4,shiro, request:nothing data 21:39:19.818 [main] INFO recordPattern.RecordPatternSample - DELETE master:78e8adb9-774f-40ec-8db9-35d87fe2c692,4,shiro, request:nothing data 21:39:19.818 [main] INFO recordPattern.RecordPatternSample - DELETE master:7d98d23c-7ec1-4c0c-999c-4abdb9d8f52e,4,shiro, request:nothing data 21: 39: 19.860 [main] INFO recordPattern.RecordPatternSample --Affiche de nouvelles données. 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :3ce5b826-0822-4c37-bf77-51a4b7468fd6,1,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :4a21ce3f-b0a9-4c74-8cf4-c6b084067440,4,rokuro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :a3273975-9147-4145-a600-dc111d2b3600,1,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :596aad9c-6fdd-4332-b36e-70573b2533fa,1,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :c2bc4e1c-ac98-489c-8522-4fcf49f95965,4,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :6958f6a4-ad80-40eb-b80a-554e1e76e516,3,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :629d6a24-9108-409f-b6bd-d1e72f0f8205,2,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :a01bcef7-31de-4e64-95bc-1a658910549a,1,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :e18557e4-8b84-4cc3-bae8-a0bc60235c56,3,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :c219c4a3-bd78-4c1d-84ca-26b87e0b3723,4,rokuro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :8d717a19-6e65-46f3-ab8e-a02be65b40cc,4,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :317663cd-2348-416d-b0d5-99aa379dffc9,2,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :bdaf5968-2e33-48ac-81d2-365b5c5d7287,1,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :5f2b0b16-1384-4fa8-b4df-81796e3424d7,4,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :90a23d6d-7f76-4a01-b317-b5fccc10d8a0,2,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :b8478d6c-d8fc-4d2d-a7cd-26f9575d3795,2,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :b347ad72-4951-428c-a417-9e8ec3be7bd3,4,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :bd4fec8e-ccc0-4e71-9cab-ee10cc859d80,3,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :476e5888-2812-48e6-b74b-9f144fb08af3,3,rokuro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :7bc84c8f-9c5b-4342-805d-ad286cf7941a,1,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :116120a9-10f4-4e6e-bcec-45dd382d2ede,3,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :b8e7dc78-06ac-429a-83f6-d8ea99269b74,4,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :59a19a25-bc2a-446f-9f0a-ac11a02936ee,2,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :9ff04fba-c802-4337-8bdb-aeab77c86f65,1,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :2471eb0a-40c4-4f7a-83ea-57bca0573726,1,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :80fd1211-f1d8-4498-ab65-c12682cac4d4,4,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :1bd7b5e3-cf7b-47fb-b995-19877f05af44,1,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :54e63a4b-17ec-4421-ba5d-6ab84301f298,1,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :0dc33f79-6308-47a8-bd06-08ac6c8fc185,1,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :e1ec3242-3de6-4e85-873f-a1c0ea7abfe5,2,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :1e5aad3a-a688-48e1-b777-fb09561c0876,2,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :72dc67f6-1fc4-4e5f-ba48-54ad5ffbe80e,3,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :fcc587b0-b359-4f66-96df-9c89f5d73260,1,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :a95c1a23-1720-45ae-8ab1-a50029c4cd49,2,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :1afaeffc-88c4-4b13-829d-7e2b576fe89f,4,saburo 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :4bbaef48-a19c-4315-ba80-77437a7cc7ec,1,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :620fee15-0f18-4d13-9cd9-5adf8cae2a41,3,goro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :d8207ec8-8a19-44de-a156-0e68c33e2a35,2,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :ce762caf-eef8-4d07-805e-a8dad4755be6,3,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :68d10177-abd7-4d20-a422-bf2073924448,3,rokuro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :e00bdc64-39ca-4413-8ee5-4b6d8fa2d914,1,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :e91e2c80-16da-43c2-8786-3c636ab52fd9,4,jiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :838c0aef-873f-42df-b393-03a0babd7cfa,1,rokuro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :7c296fbf-9b80-4f52-b298-2354d0a60a98,3,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :003ab2ed-be1d-4387-8e09-80f85bd54352,1,shiro 21:39:19.860 [main] INFO recordPattern.RecordPatternSample - new :6fe7ae99-e991-4846-8e39-67c733d667d8,1,shiro 21:39:19.868 [main] INFO recordPattern.RecordPatternSample - new :124f781b-b2c5-4b41-b9d7-1e450187dc36,4,rokuro 21:39:19.868 [main] INFO recordPattern.RecordPatternSample - new :65bf8b3d-bcb8-45d1-b8eb-8ea6ad3f5a91,1,shiro 21:39:19.868 [main] INFO recordPattern.RecordPatternSample - new :aa74296f-073b-488d-99be-3471695d9632,2,jiro 21:39:19.868 [main] INFO recordPattern.RecordPatternSample - new :dc04d992-baf5-42ea-8d68-3e7bb7beda3f,1,shiro 21: 39: 19.880 [main] INFO recordPattern.RecordPatternSample --Affichage des données supprimées. 21:39:19.880 [main] INFO recordPattern.RecordPatternSample - delete :5d14ab31-84ec-47c7-8bee-6a8f6afa3f59,4,rokuro 21:39:19.880 [main] INFO recordPattern.RecordPatternSample - delete :f551e46b-ad4c-475d-b68f-b55b1b699a82,4,jiro 21:39:19.880 [main] INFO recordPattern.RecordPatternSample - delete :3ac1d4ac-9ef2-454b-a0b5-7b70f0a37bd7,4,goro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :cb7ad23a-4e86-46c7-8bd8-c1d9002cd01f,3,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :60a5f406-9df8-4d4b-98cb-2e42480aa757,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :6cd08a93-5cad-4ba5-acc5-1a027ba67a6b,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :bd67860c-eb96-41e9-92bf-dc3042bcc163,3,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :6b8a6a5f-fdbb-4e80-8d00-b81ecce590a3,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :181a298d-96e1-4a21-aad0-7caa2cadaaa9,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :10273738-2d41-4584-93f8-4554d5cdd015,3,goro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :10dbfb93-c762-4557-83a4-b4e8fce3b57a,4,goro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :a284f196-84a4-4f2f-9828-3e0158857c75,4,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :78e8adb9-774f-40ec-8db9-35d87fe2c692,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :766966b8-c212-4336-ba34-e392754ddc1a,4,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :95d8fcf0-856f-4376-abda-9d1a0f518e52,3,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :a62e2530-8892-49fe-a2b7-90dcfe6a1a94,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :6a231e9e-7e1c-41bd-8578-bfc8aeb74828,4,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :abf89771-659a-4a26-927c-ac085851806e,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :81c4700d-6030-4569-aa83-6a1312d3032e,3,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :cd13459f-f74d-430f-994f-47755c6a61fc,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :b4611046-a331-477c-8379-c3de6f225c6e,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :6a85ae1b-2d78-4397-b46b-8d7ab4652711,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :d8e0bb66-f99f-41a6-a726-2cc6026966ea,4,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :cc758d94-b5c8-415c-94e9-29647e498995,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :823ead11-9213-40a4-8699-7cdd21a67825,3,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :b5997fc1-3009-48ca-a8d9-33656f59b8bc,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :9149e643-7a0b-4aea-bbe3-9f32474747d2,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :ea5c2f0f-05e4-42ea-8088-8a86961ddc64,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :972c8872-8328-489f-b842-de590834f907,4,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :bc2bd2e8-9f11-49c8-ac2e-1bf2de099ce2,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :64b846e5-9a4b-4b47-a2a6-601189a3bbbc,3,goro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :7724e31f-268b-4aac-b755-61f048483a13,4,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :7d98d23c-7ec1-4c0c-999c-4abdb9d8f52e,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :8c6a8e46-b65c-4209-b84a-5bd75f26d74b,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :a5f685e5-8cfa-4b42-a3f3-4beed0495a6d,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :ccf4e3c0-6eea-46f7-8b5b-dea70315f1fe,3,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :27a9c03c-7c3e-4bca-a7cf-5205b9ed064b,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :05cc34a7-9673-4da7-b4a7-1a504a94a6fb,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :6f44b1f9-d29f-4c07-bdc7-9554dc14ee97,3,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :a8a64c80-1421-4227-8048-e5d1d3060b26,4,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :5f28cf17-a204-4935-8b1b-429eee8eb327,3,goro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :9b962555-d358-4472-9bca-ec304e7358a9,4,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :e5063475-63d3-4aac-ab4c-228ee626717a,4,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :ac67cc40-ec81-4553-baa9-04ba9ecbf516,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :a385fb96-0cc4-4eb9-a0bd-8b99c3733f3f,3,jiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :26569d30-fb2f-470e-b3a9-d47d3e02b621,3,shiro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :e2c9bea6-bce5-498f-9a7c-90e15fad5b24,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :cf6e53cb-2f85-4ceb-b229-f4f5ac685914,3,saburo 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :039f10e0-2325-4453-9b85-592cfb4dfacf,3,rokuro 21:39:19.890 [main] INFO recordPattern.RecordPatternSample - delete :63631afd-433e-4620-a401-f423c852bcfb,3,shiro 21: 39: 19.900 [main] INFO recordPattern.RecordPatternSample --Affiche les données de mise à jour. 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :8df9c1a1-b6db-4bc0-b7dd-510cd7a3f3ce,1,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :2eb116e0-afe4-4c30-a562-82c28b33e0ca,2,saburo 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :dca9c586-5f80-46f2-bcb8-f1d6aa7470a6,1,shiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :0c5c1e69-c58c-41f9-9a78-ef9bfc58e416,1,jiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :57eab0b5-0cab-4982-9a99-15c1e54bb67d,2,shiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :bac23a4d-fbd9-4e01-974e-5b4133c1b595,1,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :291129c5-30ad-4a58-9861-364790f0a637,1,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :c2941487-0185-46b0-8117-c4817bfe5147,1,saburo 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :ebaeb8c4-949f-4731-b803-5836b340a875,1,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :0ece9e7f-ed59-49cf-b5d0-20baf8deab78,2,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :32ce3fe9-cf1d-4e60-b6e3-e54404063cb6,1,rokuro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :74ed8852-6d6a-40e0-8923-a71023f72e6c,2,goro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :d0c4e7af-dde1-4c94-a047-600721215303,2,goro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :dfe53792-5b82-4338-8e4e-510e1e5099ef,3,goro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :30752912-5d69-42a8-8892-907972b2430e,1,shiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :b74d351a-f038-4f7c-b718-3705dc71e07d,2,goro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :25ce82f5-d45b-4779-98f1-d0c16fad6594,1,saburo 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :3a67008e-7fa2-496b-b50c-341eb7e4fb18,1,shiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :47d530b4-e88b-4bbe-a1db-0b3dc7e32773,2,jiro 21:39:19.900 [main] INFO recordPattern.RecordPatternSample - update :bd6151b8-70f2-40f2-b6e2-8c25a861ca99,2,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :f475429b-10cc-49bb-9279-921e641f3952,1,goro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :6bd5f5f2-154a-435f-a43d-49d013023a10,2,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :83245858-ff8f-4426-8462-c791e44e0f3c,2,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :2d1f1380-0072-45cd-9452-024e137f9c1e,2,goro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :74c8a2e7-dd4f-4cfb-838f-32e62f799c2e,1,saburo 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :e4e92eb9-0c4f-483b-91ac-ef2132da6294,2,jiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :a31e9986-5bfe-44de-977d-33ca4c3848ef,1,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :b923f1ab-7324-4fbf-a13a-c16eadc4af7e,1,rokuro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :c97bf082-d689-43e9-bee5-f1c28274d138,2,goro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :e1754cc1-56c4-4e36-964d-1ab839bd2846,1,rokuro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :c8d1d9fe-7550-48cf-b568-110644075e19,1,saburo 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :6fcef8cf-a3c3-4581-8218-71feaa86eadf,2,rokuro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :bc6193a2-1702-480f-93ac-78b12e9a93dc,1,saburo 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :05a10afa-ffa8-4d23-b686-14d4325c3917,1,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :8b37364d-e442-424b-b8df-e36e3fb30f2b,2,saburo 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :9e73f7d1-de2a-4ad0-9b16-a225001c1a5d,2,rokuro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :24a08049-ef2e-4c9f-b934-e2fa8853bbd5,1,jiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :888744f4-0f49-4f01-8506-ab063ce2f778,1,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :f8625d47-4183-4693-a4b4-048abe92e190,2,rokuro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :4d4a5b75-da44-475c-bccd-f3acb77d5e48,1,jiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :7112029b-7e91-43ce-858e-b5cd1a15d127,1,shiro 21:39:19.908 [main] INFO recordPattern.RecordPatternSample - update :168d5fe9-e369-4d3d-956b-e9faa6c91a25,1,shiro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :a59b47ca-0233-49f6-ac27-4748687ef0a6,1,saburo 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :15f73130-7a5e-41cc-b43f-0910fbfe9429,2,goro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :893b4348-ebce-4c43-8a45-3250bd3fc726,1,goro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :9cbd1993-bf0f-48b6-89e7-78fd0bb7c94c,2,jiro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :0cc04ce6-5698-4b38-9f3b-1d429c4f57e7,2,jiro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - update :02686803-4b17-4c0a-914e-ab04ba84e560,1,saburo 21: 39: 19.910 [main] INFO recordPattern.RecordPatternSample --Affichage des données non mises à jour. 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - no modified :dada18a6-73e2-4eef-8c29-649fb24d8616,1,jiro 21:39:19.910 [main] INFO recordPattern.RecordPatternSample - no modified :3dd86959-d1c6-4e91-bdc8-be20e4ac7cdc,2,shiro >Process finished with exit code 0

De cette manière, en contrôlant l'équivalence des objets et en utilisant l'API de collecte, il est possible de mettre en œuvre en utilisant la puissance des opérations d'ensemble.

[^ 1]: "General" est plus convaincant que "general purpose". Le texte original est écrit comme "contrat général". Dans la traduction japonaise du célèbre livre "Effective Java", il est traduit par "contrat général". [^ 2]: Également dans cet article, lorsque Comparable # compareTo a été implémenté dans la classe Record de l'exemple d'implémentation, il y avait un problème de disparition de l'élément de Set car il était rendu incompatible avec equals.

Recommended Posts

Recommandation de l'opération set par Java (et compréhension de equals et hashCode)
Comprendre equals et hashCode en Java
[Java] HashCode et remplacement égal
La comparaison d'énumération est ==, et equals est bonne [Java]
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
[Java] Compréhension débutante de Servlet-②
[Java] Différence entre == et égal
Principes de base de l'utilisation des caractères (Java)
[Java] Compréhension débutante de Servlet-①
[Java] Définit la structure de la classe de collection (à propos de HashSet et TreeSet)
Avantages et inconvénients de Java
À propos de Biocontainers fastqc et Java
À propos des méthodes equals () et hashcode ()
[Java] DateTimeFormatter sortie par FormatStyle
[Java débutant] == opérateur et méthode equals
Java passe par valeur et passe par référence
Compréhension étape par étape de la gestion des exceptions Java
Après 3 mois de formation Java et Spring
Résumé de la compréhension de Docker par les débutants ② ~ docker-compose ~
À propos du fonctionnement de next () et nextLine ()
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
[Java] Comparaison des méthodes d'opération de la collection et de StringBuilder
Résumé de Java Math.random et import (calendrier)
[Java] Contenu de l'interface de collection et de l'interface de liste
Discrimination d'énum dans Java 7 et supérieur
Résumé de la compréhension de Docker par les débutants ④ ~ Jusqu'à ce que l'instance EC2 soit démarrée et que Docker soit installé ~