Empfehlung der Set-Operation durch Java (und Verständnis von Equals und HashCode)

Das Ziel dieses Artikels

Diejenigen, die diesen Artikel lesen wollen

Lesen Sie diesen Artikel, die Szene der Nutzung des geborenen Wissens

Beispielsweise ist es möglich, Unterschiede in CSV-Dateien einfach zu vergleichen. Gleiches gilt für den Differenzvergleich von Tabellendaten.

Beispiel-Code-Ausführungsumgebung

Java 11

Auswirkung des Betonsatzbetriebs

Ein Beispiel für die Set-Operation ist unten dargestellt.

論理積

排他的論理和

論理和

Darüber hinaus können auch Differenzsätze erhalten werden.

Vorwissen

Objektäquivalenz

In Java gibt es zwei Arten der Objektäquivalenz:

Objektidentität

In Java kann die Identität überprüft werden, indem Objekte mit Referenzadressen mit == verglichen werden.

Reference.java


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

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

Objektäquivalenz

Entspricht der Object-Klasse, die alle Objekte erben Die Äquivalenz kann durch Überschreiben bestimmt werden.

Equals.java


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

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

Und eine Methode namens hashCode ist tief in diese Gleichheit involviert.

Funktionsweise der Java-Objektäquivalenzbewertung

Schauen wir uns zunächst das JavaDoc an.

equals JavaDoc entspricht (von Java8 Oracle HP)

Gibt an, ob dieses Objekt anderen Objekten entspricht. Die Methode equals implementiert die Äquivalenz mit Objektreferenzen ungleich Null

Konkretes Beispiel.java


object.equals(null); // false
  • Reflexiv: Für Nicht-Null-Referenzwerte x gibt x.equals (x) true zurück.

Schauen wir uns jeden an.

Gleiche Anforderung: Reflektierend

  • Reflexiv: Für Nicht-Null-Referenzwerte x gibt x.equals (x) true zurück.

Entspricht dem im Abschnitt zur Objektäquivalenz dargestellten.

Equals.java


object.equals(object); // true 

Gleiche Anforderung: Symmetrie

  • Symmetrisch: Für Nicht-Null-Referenzwerte x und y gibt x.equals (y) nur dann true zurück, wenn y.equals (x) true zurückgibt.

Konkretes Beispiel.java


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

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

Gleiche Anforderungen: Übergang

  • Für Nicht-Null-Referenzwerte x, y und z gibt x.equals (z) true zurück, wenn x.equals (y) true und y.equals (z) true zurückgibt. Wenn A = B und B = C, dann ist A = C.

Konkretes Beispiel.java


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

object.equals(object2); // true
object2.equals(object3); // true
//Object2 ohne Vergleich.equals(object3)Scheint wahr zurückzugeben.

Gleiche Anforderungen: Konsistenz

  • Konsistent: Mehrere Aufrufe von x.equals (y) für Nicht-Null-Referenzwerte x und y Wenn sich die im Gleichheitsvergleich für dieses Objekt verwendeten Informationen nicht geändert haben, wird entweder konsistent true oder konsistent false zurückgegeben.

Unabhängig davon, wie oft gleich ausgeführt wird, wird das gleiche Ergebnis zurückgegeben, wenn die Objekte gleich sind.

Konkretes Beispiel.java


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

Javadoc von Objekt # entspricht weiterhin

Die Methode equals der Object-Klasse implementiert die Äquivalenzbeziehungen der vergleichbarsten Objekte. Das heißt, für Nicht-Null-Referenzwerte x und y gibt diese Methode nur dann true zurück, wenn x und y auf dasselbe Objekt verweisen (x == y ist true).

Mit anderen Worten, die Gleichheit der Objektklasse selbst im vorherigen Beispiel

Konkretes Beispiel.java


object.equals(object2);

Ist

Konkretes Beispiel.java


object == object2;

Sofern die Klasse nicht gleich überschreibt, wird nur die oben genannte Identität überprüft.

Für String ist # gleich

Beispielsweise gibt equals in der Klasse java.lang.String zuerst true zurück, wenn die Identität bestätigt wird, andernfalls wird die Äquivalenz überprüft. Befolgen Sie beim Überschreiben grundsätzlich den Ablauf der Identitätsprüfung → Äquivalenzprüfung.

String#equals.java


    public boolean equals(Object anObject) {
        if (this == anObject) { //Überprüfung der Identität
            return true;
        }
        //Überprüfung der Äquivalenz
        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 von Objekt # entspricht weiterhin

Wenn Sie diese Methode überschreiben, sollten Sie normalerweise immer die hashCode-Methode überschreiben und die allgemeine Konvention der hashCode-Methode befolgen. ** "Äquivalente Objekte müssen den äquivalenten Hash-Code enthalten" **. Bitte beachten Sie, dass es ** gibt.

Was ist übrigens die allgemeine Regel [^ 1] von hasCode? Sollten wir nicht gleich die Methode equals überschreiben?

hashCode JavaDoc hashCode (von Java8 Oracle HP)

Gibt den Hash-Code-Wert des Objekts zurück. Diese Methode wird für die Vorteile von Hash-Tabellen unterstützt, z. B. der von HashMap bereitgestellten Hash-Tabellen.

Hash ist [Wikipedia: Hash-Funktion](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E9%96 % A2% E6% 95% B0) ist detailliert.

Es drückt den Datenidentifikationsschlüssel aus. Lesen Sie weiter den Javadoc.

Die allgemeinen Regeln für hashCode sind:

  • Immer wenn eine Java-Anwendung ausgeführt wird und mehrmals für dasselbe Objekt aufgerufen wird, gibt die hashCode-Methode immer dieselbe Ganzzahl zurück, es sei denn, die im Vergleich ** für dieses Objekt verwendeten Informationen haben sich geändert. wird gebraucht**. Diese Ganzzahl muss jedoch nicht für jeden Lauf derselben Anwendung gleich sein.

Entspricht es der Konsistenz von Gleichen in der vorherigen Stufe?

  • Wenn zwei Objekte gemäß der * equals (Object) -Methode ** gleich sind, muss ein Aufruf der ** hashCode-Methode für jedes der beiden Objekte das gleiche ganzzahlige Ergebnis ** erzeugen.
  • Wenn zwei Objekte gemäß der Methode equals (java.lang.Object) nicht gleich sind, dann zwei Das Aufrufen der hashCode-Methode für jedes Objekt muss nicht zu unterschiedlichen ganzzahligen Ergebnissen führen. Programmierer werden jedoch feststellen, dass das Generieren unterschiedlicher ganzzahliger Ergebnisse für ungleiche Objekte die Leistung von Hash-Tabellen verbessern kann. ** "Äquivalente Objekte müssen äquivalenten Hashcode enthalten" **

Die Eigenschaften der Rückgabewerte von equals und hashCode für die Äquivalenz und Nichtäquivalenz der beiden Objekte sind nachstehend zusammengefasst.

Methode Äquivalentes Objekt Nicht äquivalente Objekte
hashCode Muss gleichwertig sein Nicht gleichwertig empfohlen.
* Es muss nicht gleichwertig sein, wird jedoch für die Leistung empfohlen.
equals Sollte true zurückgeben Sollte false zurückgeben

Leises Gespräch

Inzwischen haben wir festgestellt, dass die Objektäquivalenz sowohl aus equals als auch aus hashCode besteht. Von den Klassen, die wir erstellen, wird angenommen, dass die Ziele, die die Äquivalenz beurteilen und in Sammlungen wie List, Map und Set verarbeiten, POJO (Plain Old Java Object) sind. Unter POJO werden Daten modelliert, dh DTO (Datenübertragungsobjekt), VO (Wertobjekt), Entität (Klasse, die die Tabellenstruktur imitiert), einige Daten mit unterschiedlichen Namen Im Ausdruck von wird die Äquivalenz durch Gleichheit beurteilt.

Auswahlmöglichkeiten für die Implementierung von Equals und HashCode in Java

Equals und hashCode werden von POJO überschrieben, es wird jedoch erwartet, dass die Mittelwerte wie folgt lauten.

  1. Implementierung der Bibliothek [lombok] durch @EqualsAndHashCode Annotation (https://projectlombok.org/)
  2. Implementierung durch die Quellvervollständigungsfunktion von IDE wie Eclipse
  3. Entwicklerimplementierung

Für 1 und 2 ist es eine Implementierung von equals, die überprüft, ob alle Felder dieser Klasse und der Superklasse den gleichen Wert haben.

In Bezug auf 3 scheint es, dass eine Methode, die denselben Wert überprüft, auf dieselbe Weise erstellt oder unter bestimmten Umständen implementiert wird. In diesem Artikel wird dies jedoch nicht angenommen und nicht empfohlen. 1 scheint der Vertreter zu sein.

Bestätigung der Sammlungs-API mit Kenntnis von Gleichheit und Hashcode

Die Objekte equals und hashCode sind in der Auflistungs-API wichtig. Wir werden erneut die Beteiligung von equals und hashCode an der Collection-API bestätigen. Da dies eine Einführung auf der Schnittstellenseite ist, lesen Sie bitte das Javadoc und wählen Sie die entsprechende Implementierungsklasse aus, wenn Sie es verwenden.

List

Charakteristisch

Eine Sammelschnittstelle mit einer Bestellung. Die Implementierungsklassen sind in der Standardimplementierung wie folgt. Es gibt Implementierungen in vielen anderen Bibliotheken.

Diese werden basierend auf den Eigenschaften implementiert, die vom Javadoc der List-Schnittstelle erfüllt werden. Die Implementierungsdetails sind für jede Implementierungsklasse unterschiedlich. Beispielsweise hat LinkedList einen langsamen Direktzugriff (Zugriff über Indizes), der Betrieb von Tip / End-Elementen ist schnell und ArrayList hat einen schnellen Direktzugriff. Wir werden hier nicht darauf eingehen, wie jede Implementierungsklasse ausgewählt wird.

Einzelobjektoperation: enthält

boolean contains(Object o) Gibt true zurück, wenn das angegebene Element in dieser Liste enthalten ist. Das heißt, es wird nur dann true zurückgegeben, wenn diese Liste ein oder mehrere Elemente e enthält, die (o == null? E == null: ** o.equals (e) **) sind.

e ist jedes Element der Liste. Als Ergebnis der Überprüfung der Äquivalenz mit e in o.equals gibt es true zurück, wenn es sogar eine gibt, die true zurückgibt.

Mit anderen Worten, Liste enthält ** verwendet die gleiche Implementierung des übergebenen Objekts **. Einige Sammlungs-APIs verwenden in Operationen für die von der Sammlung gehaltenen Elemente Gleichheit.

Einzelobjektoperation: entfernen

boolean remove(Object o) Wenn sich das angegebene Element in dieser Liste befindet, entfernen Sie das erste aus der Liste (optionale Operation). Wenn das Element nicht in dieser Liste enthalten ist, wird es nicht geändert. Löschen Sie also das Element mit dem kleinsten Indexwert i (o == null? Get (i) == null: ** o.equals (get (i)) **) (ein solches Element) Wenn vorhanden). Gibt true zurück, wenn das angegebene Element in dieser Liste enthalten war (dh wenn diese Liste infolge eines Aufrufs geändert wurde).

Gleich wie enthält und hängt von der Implementierung von Gleichen ab. Es wird auch die Überlegung beschrieben, wenn mehrere Objekte gleich sind.

Aggregierte Objektmanipulation: gleich

boolean equals(Object o) Vergleicht, ob das angegebene Objekt dieser Liste entspricht. ** Gibt nur dann true zurück, wenn das angegebene Objekt auch eine Liste **, ** derselben Größe ** ist und alle entsprechenden Elemente der beiden Listen gleich sind **. Die beiden Elemente e1 und e2 sind gleich, wenn sie sind (e1 == null? E2 == null: ** e1.equals (e2) **). Das heißt, die beiden Listen werden als ** gleich definiert, wenn dieselben Elemente in derselben Reihenfolge enthalten sind **. Diese Definition stellt sicher, dass die Methode equals mit verschiedenen Implementierungen der List-Schnittstelle ordnungsgemäß funktioniert.

Es ist ersichtlich, dass die Gleichheit von List die Verarbeitung an die Gleichheit der Elementklasse delegiert, über die List selbst verfügt.

Der folgende Abschnitt listA.equals (listB) lautet beispielsweise

StringListEquals.java


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

listA.equals(listB); // true

Daher wird true zurückgegeben.

Aggregierte Objektoperation: enthältAll

boolean containsAll(Collection<?> c) Gibt true zurück, wenn alle Elemente der angegebenen Auflistung in dieser Liste enthalten sind.

Eine Erweiterung von enthält, die true zurückgibt, wenn die aufrufende Liste alle Elemente des Arguments c enthält (das Ergebnis von enthält ist true).

Mit anderen Worten, es wird überprüft, ob ein Satz alle angegebenen Sätze enthält.

Aggregierte Objektoperation: keepAll

boolean retainAll(Collection<?> c) Behält nur die Elemente bei, die in der angegebenen Sammlung in dieser Liste enthalten sind (optionaler Vorgang). Das heißt, es werden alle Elemente aus dieser Liste entfernt, die nicht in der angegebenen Sammlung enthalten sind.

Mit anderen Worten, Sie erhalten das Produkt eines Satzes und eines bestimmten Satzes. Wenn keine enthalten sind, ist die Anruferliste natürlich leer.

Aggregierte Objektoperation: removeAll

boolean removeAll(Collection<?> c) Entfernt alle Elemente aus der angegebenen Sammlung aus dieser Liste (optionaler Vorgang).

Erweiterung entfernen.

Set

Charakteristisch

Eine Sammlung ohne doppelte Elemente. Das heißt, die Menge hat kein Elementpaar von e1 und e2, das ** e1.equals (e2) ** ist, und hat höchstens ein Nullelement. Wie der Name schon sagt, modelliert diese Schnittstelle die Abstraktion von Mengen in der Mathematik.

Eine Auflistungsklasse, in der doppelte Elemente nicht beibehalten werden können. Das Urteil über die Vervielfältigung ist fett gedruckt.

Die Idee der Methode ist die gleiche wie bei List. Siehe Javadoc für Details.

SortedSet

Charakteristisch

Ein Set, das die globale Reihenfolge für dieses Element bereitstellt. Die Reihenfolge der Elemente erfolgt gemäß ihrer natürlichen Reihenfolge oder unter Verwendung des Komparators, der normalerweise beim Erstellen eines Sets bereitgestellt wird. Der Mengeniterator durchläuft die Menge in aufsteigender Reihenfolge der Elemente. Es werden einige zusätzliche Vorgänge bereitgestellt, um diese Bestellung zu nutzen. (Diese Schnittstelle ist ein Set und ähnelt SortedMap.)

Das Folgende sind spezielle Hinweise [^ 2]

Damit ein Sortiersatz die Set-Schnittstelle ordnungsgemäß implementiert, muss die von diesem Sortiersatz verwaltete Reihenfolge mit gleich übereinstimmen, unabhängig davon, ob ein expliziter Komparator bereitgestellt wird. Bitte beachten Sie, dass Sie dies nicht tun sollten. (Die genaue Definition der Konsistenz mit equals finden Sie in der Schnittstelle Compareable oder Comparer.) Dies liegt daran, dass die Set-Schnittstelle basierend auf der Operation equals definiert wird, die Sortiermenge jedoch die Methode compareTo oder ist Da wir die Vergleichsmethode verwenden, um alle Elementvergleiche durchzuführen, sind die beiden Elemente, die von dieser Methode als gleichwertig angesehen werden, unter dem Gesichtspunkt der Sortiermenge gleich. Das Verhalten von Sortiersätzen ist gut definiert, auch wenn ihre Reihenfolge nicht mit gleich übereinstimmt, entspricht jedoch nicht den allgemeinen Konventionen der Set-Schnittstelle.

SortedSet ist eine Auflistungsklasse, die Klassen enthält, die die Schnittstelle Comparable implementieren. Das in Comparable implementierte compareTo muss mit equals übereinstimmen. Das heißt, wenn compareTo 0 ist (die Reihenfolge stimmt überein), sollte equals true zurückgeben.

Referenzartikel Hinweis, weil ich von TreeSet Composer abhängig war (für Anfänger)

Map

Charakteristisch

Sogenannte Schlüssel-, Wertwörterbuchklasse.

Aggregierte Objektoperation: entrySet

public Set<Map.Entry<K,V>> entrySet() Gibt eine Set-Ansicht der in dieser Map enthaltenen Zuordnungen zurück. ** Da das Set mit der Karte verknüpft ist, werden Änderungen an der Karte im Set ** und Änderungen am Set in der Karte ** wiedergegeben. Wenn die Map während des iterativen Prozesses des Satzes geändert wird, ist das Ergebnis des iterativen Prozesses undefiniert (mit Ausnahme der Entfernungsoperation des Iterators selbst oder der setValue-Operation für den vom Iterator zurückgegebenen Karteneintrag). Das Set unterstützt das Löschen von Elementen. Die Operationen Iterator.remove, Set.remove, removeAll, keepAll und clear entfernen die entsprechende Zuordnung aus der Zuordnung. Add- oder addAll-Operationen werden nicht unterstützt.

Set \ <Map.Entry \ <K, V > > ist in der For Each-Schleife verfügbar. Es wird gezeigt, dass durch das Erfassen aller Elemente von Map mit Set der Betrieb in einer festgelegten Einheit möglich wird.

Aggregierte Objektmanipulation: gleich

boolean equals(Object o) Vergleicht, ob das angegebene Objekt dieser Zuordnung entspricht. Das angegebene Objekt ist ebenfalls eine Karte und gibt true zurück, wenn die beiden Karten dieselbe Zuordnung darstellen. Das heißt, wenn m1.entrySet () gleich (m2.entrySet ()) ist, repräsentieren die beiden Abbildungen m1 und m2 dieselbe Zuordnung. Dadurch wird sichergestellt, dass die Methode equals auch dann ordnungsgemäß funktioniert, wenn die Map-Schnittstelle anders implementiert ist.

Implementierungsbeispiel für eine konkrete Mengenoperation Basic

Thema

Stellen Sie A ein image.png

Set 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");

        //Summensatz
        System.out.println("Summensatz");
        Set<String> setAcopy = new HashSet<>(setA);
        Set<String> setBcopy = new HashSet<>(setB);
        setAcopy.addAll(setBcopy); //setB wird zum Inhalt von setA hinzugefügt
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Differenz gesetzt
        System.out.println("Differenz gesetzt");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        setAcopy.removeAll(setBcopy); //Subtrahiere setB vom Inhalt von setA.
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Produktset
        System.out.println("Produktset");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        setAcopy.retainAll(setBcopy); //Belassen Sie die Inhalte in setA und setB in setA
        setAcopy.forEach(System.out::print);
        System.out.println();

        //Exklusive logische Summe
        System.out.println("Exklusiver logischer Summensatz");
        setAcopy = new HashSet<>(setA);
        setBcopy = new HashSet<>(setB);
        Set<String> setAcopy2 = new HashSet<>(setA);
        //Holen Sie sich zuerst das Produktset
        setAcopy.retainAll(setBcopy);
        //Schließen Sie das Produktset von jedem Set aus
        setAcopy2.removeAll(setAcopy);
        setBcopy.removeAll(setAcopy);
        setAcopy2.addAll(setBcopy);
        setAcopy2.forEach(System.out::print);
    }
}


Summensatz

Fügen Sie B zu A hinzu.

Vorhersage der Ausführungsergebnisse image.png  +  image.png  =  image.png

Summensatz.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); //Set A + Set B.

Ausführungsergebnis

abcd


Differenz gesetzt

Subtrahieren Sie B-Set von A-Set

Vorhersage der Ausführungsergebnisse image.png  -  image.png  =  image.png

Differenz gesetzt.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); //Set A-Set B.

Ausführungsergebnis

a


Produktset

Holen Sie sich die Elemente in den Sets A und B.

Vorhersage der Ausführungsergebnisse image.png  ×  image.png  =  image.png

Produktset.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); //Stellen Sie A ein*Set B.

Ausführungsergebnis

bc


Exklusiver logischer Summensatz

Erhalten Sie ein Element, das nur in der A-Menge oder der B-Menge vorhanden ist.

Vorhersage der Ausführungsergebnisse image.png  XOR  image.png  =  image.png

Exklusiver logischer Summensatz.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);
        //Holen Sie sich zuerst das Produktset
        setAcopy.retainAll(setBcopy); //Stellen Sie A ein*Set B.
        //Schließen Sie das Produktset von jedem Set aus
        setAcopy2.removeAll(setAcopy); //Stellen Sie A ein- (Stellen Sie A ein*Set B.)=Es existiert nur Satz A.
        setBcopy.removeAll(setAcopy); //Set B.- (Stellen Sie A ein*Set B.)=Es existiert nur Satz B.
        setAcopy2.addAll(setBcopy); //Stellen Sie A ein,Eine Menge, die nur in einer von B existiert

Ausführungsergebnis

ad

Implementierungsbeispiel für die konkrete Set-Operation Entwicklung

Bibliothek verwendet

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'
}

Differenzprüfung für jedes Objekt

Klasse zu verwenden

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;

    //Damit die Ausgabe besser sichtbar ist
    @Override
    public int compareTo(Object o) {
        if (o instanceof Record) {
            //Alter aufsteigende Reihenfolge,Name aufsteigende Reihenfolge
            Comparator<Record> comparator =
                    Comparator.comparing(Record::getAge).
                            thenComparing(Record::getName).
                            thenComparing(Record::getPrimaryKey);
            return comparator.compare(this, (Record) o);
        }
        return 0;
    }

    //Kehren Sie von der Datensatzklasse zur später beschriebenen Änderungserkennung zur Datensatzklasse zurück
    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();
        }
    }
}

Eine Klasse, die sogenannte gewöhnliche Tabellendatensätze imitiert. Durch die Implementierung von Comparable wurde es notwendig, compareTo zu implementieren.

Vorsichtsmaßnahmen bei der Implementierung von Comparable Objekte, für die das Ergebnis von compareTo 0 ist, werden auch bei Sammlungen mit einer TreeSet-Reihenfolge als gleichwertig beurteilt. Wenn Sie dem TreeSet mehrere Objekte hinzufügen, die 0 mit compareTo zurückgeben, wie in diesem Beispiel gezeigt, verschwindet eines davon. In der Record-Klasse wird nicht für jedes Feld eine Nullprüfung durchgeführt, daher ist auch für den tatsächlichen Betrieb eine Nullprüfung erforderlich.

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;

/**
 *Aufzeichnung für neue / gelöschte Erkennung.
 * <pre>
 *Diese VO implementiert die Äquivalenz zum Klassifizieren neuer und gelöschter Master.
 *Die Gleichheitsmethode wird verwendet, um die Äquivalenz zu bestimmen{@code age, name}Beinhaltet nicht.
 * </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();
        }
    }
}

Eine Datensatzklasse, die die Äquivalenzbeurteilung nur anhand der ID durchführt.

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;

/**
 *Datensatz für Master-Update.
 * <pre>
 *Diese VO implementiert die Äquivalenz zum Klassifizieren von Master-Updates.
 *Die Gleichheitsmethode wird verwendet, um die Äquivalenz zu bestimmen{@code primaryKey}Beinhaltet nicht.
 * </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();
        }
    }
}

Eine Datensatzklasse, die eine Äquivalenzbeurteilung in anderen Feldern als ID (Name, Alter) durchführt.

RecordPatternSample.java



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

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

/**
 *Beispiel für eine Datensatzoperation
 */
public class RecordPatternSample {
    private Logger logger = LoggerFactory.getLogger(RecordPatternSample.class);

    enum ModifiedPattern {
        NEW,
        UPDATE,
        DELETE,
        NO_MODIFIED
    }

    //Ich möchte sortieren und ausgeben, also aktivieren Sie Comparable, das in Record with TreeSet implementiert ist
    //Stammsatzgruppe
    private SortedSet<Record> masterRecords = new TreeSet<>();
    //Datensatzgruppe anfordern (Stammdatensatzaktualisierungsdaten, die von einer Methode gesendet wurden)
    private SortedSet<Record> requestRecords = new TreeSet<>();

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

        int createSize = masterRecords.size();

        //Die Hälfte der vorhandenen Daten in den Anforderungsdaten
        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);
        }
        //Die andere Hälfte sind neue Daten (immer neu von UUID)
        while (requestRecords.size() < createSize) {
            requestRecords.add(createRandomRecord());
        }
    }

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

    private void exec() {
        //Holen Sie sich die Summe zum Drucken
        //Zu diesem Zeitpunkt werden die entsprechenden Objekte (die für diesen Prozess nicht von Interesse sind, da es sich um nicht aktualisierte Daten handelt) von Set zu einem Objekt zusammengefasst.
        Set<Record> aPlusBSet = getPlusSet(masterRecords, requestRecords);

        //Vorläufige Listenausgabe
        //Basierend auf dem Summensatz werden die entsprechenden Objekte aus der Stammsatzgruppe extrahiert und die Datensatzgruppe angefordert und ausgegeben.
        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));
        });

        //Identifizieren Sie neue, gelöschte, aktualisierte und nicht aktualisierte Daten durch Satzberechnung

        //Rufen Sie einen Satz ab, der nur in der Anforderungsdatensatzgruppe vorhanden ist.
        //Anforderungsdatensatzgruppe - Stammdatensatzgruppe = Daten, die nur in der Anforderungsdatensatzgruppe vorhanden sind
        //Das heißt, neue Daten
        Set<Record> newRecordSet = getSubtractSet(requestRecords, masterRecords);

        logger.info("Anzeige neuer Daten.");
        newRecordSet.forEach(e -> logger.info("new :{}", toString(Optional.of(e))));

        //Rufen Sie einen Satz ab, der nur in der Stammsatzgruppe vorhanden ist.
        //Stammsatzgruppe - Anforderungssatzgruppe = Daten, die nur in der Stammsatzgruppe vorhanden sind
        //Das heißt, gelöschte Daten
        Set<Record> deleteRecordSet = getSubtractSet(masterRecords, requestRecords);
        logger.info("Anzeige gelöschter Daten.");
        deleteRecordSet.forEach(e -> logger.info("delete :{}", toString(Optional.of(e))));

        //Beziehen Sie den Produktsatz der Stammsätze und Anforderungssätze.
        //Stammsatzgruppe (ID) x Anforderungssatzgruppe (ID) = ID-Gruppe, die in beiden vorhanden ist
        //Stammsatzgruppe (nach ID extrahiert) x Anforderungssatzgruppe (nach ID extrahiert) = Datengruppe mit beidseitiger ID
        //Das heißt, die Aktualisierungsdaten
        Set<Record> updateRecordSet = getUpdateSet(masterRecords, requestRecords);
        logger.info("Anzeige aktualisierter Daten.");
        updateRecordSet.forEach(e -> logger.info("update :{}", toString(Optional.of(e))));

        //Existiert sowohl in der Stammsatzgruppe als auch in der Anforderungssatzgruppe und alle stimmen genau überein
        Set<Record> noModifiedSet = getSameSet(masterRecords, requestRecords);
        logger.info("Anzeige von Daten ohne Aktualisierung.");
        noModifiedSet.forEach(e -> logger.info("no modified :{}", toString(Optional.of(e))));
    }

    /**
     *Holen Sie sich das Master-Update-Muster
     *
     * @param masterRecord Stammsatz
     * @param requestRecord Anforderungsdatensatz
     * @Master-Update-Muster zurückgeben
     */
    private ModifiedPattern getModifiedPattern(Optional<Record> masterRecord, Optional<Record> requestRecord) {

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

            //Durch Ersetzen durch ModifiedRecord
            //Überprüfen Sie die Äquivalenz ohne PK und bestätigen Sie das Vorhandensein oder Fehlen einer Aktualisierung
            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();
    }

    /**
     *Suchen Sie den gleichen Primärschlüsseldatensatz in Set
     *
     * @param set set
     * @Parameteraufzeichnung
     * @Rückgabe Optionaler Datensatz
     */
    private Optional<Record> searchSameRecord(Set<Record> set, Record e) {
        return set.stream().filter(t -> t.getPrimaryKey().equals(e.getPrimaryKey())).findFirst();
    }

    /**
     *Holen Sie sich die Zeichenfolgen für UUID, Alter und Namen.
     *
     * @Parameteraufzeichnung
     * @Geben Sie UUID, Alter und Namen in einem Doppelpunkt zurück
     */
    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();
    }

    /**
     *Holen Sie sich das Produktset
     *
     * @param setA set A.
     * @param setB set B.
     * @Produktsatz zurücksenden
     */
    private Set<Record> getUpdateSet(final Set<Record> setA, final Set<Record> setB) {
        SortedSet<Record> recordSetCopyA = new TreeSet<>(setA);
        SortedSet<Record> recordSetCopyB = new TreeSet<>(setB);

        //Holen Sie sich den Primärschlüssel für das Produktset
        //Extrahieren Sie IDs, die sowohl in Satz A als auch in Satz B vorhanden sind
        Set<UUID> samePrimarySet = recordSetCopyA.stream()
                .filter(e -> recordSetCopyB.stream().anyMatch(b -> e.getPrimaryKey().equals(b.getPrimaryKey())))
                .map(Record::getPrimaryKey)
                .collect(Collectors.toSet());

        //Aus der Menge A werden die Datensätze extrahiert, die mit den IDs der Elemente der Menge B übereinstimmen.
        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());

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

        return filteredSetA;
    }

    /**
     *Holen Sie sich die Summe gesetzt.
     *
     * @param setA set A.
     * @param setB set B.
     * @return Die Summenmenge von Menge A und Menge 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;
    }

    /**
     *Holen Sie sich den Unterschied eingestellt.
     *
     * @param setA set A.
     * @param setB set B.
     * @Rückgabesatz A minus Satz B.
     */
    private Set<Record> getSubtractSet(SortedSet<Record> setA, SortedSet<Record> setB) {
        //Stellen Sie sicher, dass die Gleichheitsspezifikation nur von der Primärschlüsselübereinstimmung abhängt
        Set<DeleteOrInsertRecord> copyASet = setA.stream().map(DeleteOrInsertRecord::new).collect(Collectors.toSet());
        Set<DeleteOrInsertRecord> copyBSet = setB.stream().map(DeleteOrInsertRecord::new).collect(Collectors.toSet());

        //Schließen Sie solche mit übereinstimmenden IDs aus
        copyASet.removeAll(copyBSet);

        //Zum ursprünglichen Datensatz zurückkehren
        Set<Record> aSetSubtractBSet = copyASet.stream().map(Record::new).collect(Collectors.toSet());

        return aSetSubtractBSet;
    }

    /**
     *Holen Sie sich einen gleichen Satz, in dem alle Elemente übereinstimmen.
     *
     * @param setA Ein Set
     * @param set BB set
     * @Rückgabe eines äquivalenten Satzes, in dem alle Elemente im A-Satz und im B-Satz übereinstimmen
     */
    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;
    }

    /**
     *Generieren Sie einen Datensatz mit einem zufälligen Wert.
     * <ul>
     * <li>id:UUID</li>
     * <li>Alter: 1 bis 5 Jahre</li>
     * <li>Name: ichiro, jiro, saburo, shiro, goro,Jeder von Rokuro zufällig</li>
     * </ul>
     *
     * @Datensätze mit zufälligen Werten zurückgeben
     */
    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;
    }
}

Vergleichen Sie die beiden Datensatzgruppen (Stammsatzgruppe, Anforderungssatzgruppe), Eine Klasse, die Fälle in vier Muster unterteilt: neu, gelöscht, aktualisiert und nicht aktualisiert.

Ausführungsergebnis

> 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 - Zeigt neue Daten an. 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 - Anzeige gelöschter Daten. 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 - Aktualisierungsdaten anzeigen. 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 - Anzeige nicht aktualisierter Daten. 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

Auf diese Weise ist es durch Steuern der Äquivalenz von Objekten und Verwenden der Erfassungs-API möglich, mithilfe der Leistung von Set-Operationen zu implementieren.

[^ 1]: "Allgemein" ist überzeugender als "Allzweck". Der Originaltext wird als "Generalvertrag" geschrieben. In der japanischen Übersetzung des berühmten Buches "Effective Java" wird es als "Generalvertrag" übersetzt. [^ 2]: Auch in diesem Artikel gab es bei der Implementierung von Comparable # compareTo in der Record-Klasse des Implementierungsbeispiels ein Problem, dass das Element aus Set verschwand, weil es mit equals inkonsistent gemacht wurde.

Recommended Posts

Empfehlung der Set-Operation durch Java (und Verständnis von Equals und HashCode)
Verstehe gleich und hashCode in Java
[Java] HashCode und gleich Überschreibung
Der Vergleich von enum ist == und gleich ist gut [Java]
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
[Java] Anfängerverständnis von Servlet-②
[Java] Unterschied zwischen == und gleich
Grundlagen der Zeichenoperation (Java)
[Java] Anfängerverständnis von Servlet-①
[Java] Struktur der Auflistungsklasse festlegen (zu HashSet und TreeSet)
Vor- und Nachteile von Java
Über Biocontainer fastqc und Java
Informationen zu den Methoden equals () und hashcode ()
[Java] Ausgabe von DateTimeFormatter durch FormatStyle
[Java-Anfänger] == Operator und Gleiche Methode
Java als Wert übergeben und als Referenz übergeben
Schrittweises Verständnis der Behandlung von Java-Ausnahmen
Nach 3 Monaten Java- und Frühlingstraining
Zusammenfassung des Docker-Verständnisses für Anfänger do ~ Docker-Compose ~
Informationen zur Funktionsweise von next () und nextLine ()
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
[Java] Vergleich von Sammlungs- und StringBuilder-Operationsmethoden
Zusammenfassung von Java Math.random und Import (Kalender)
[Java] Inhalt der Collection-Schnittstelle und der List-Schnittstelle
Diskriminierung von Enum in Java 7 und höher
Zusammenfassung des Docker-Verständnisses für Anfänger ④ ~ Bis die EC2-Instanz gestartet und der Docker installiert ist ~