Zusammenführen von java.util.Properties-Objekten

Java.util.Properties-Objekte zusammenführen

1. Einführung

In diesem kurzen Tutorial werdenwe’ll focus on how to merge two or more Java Properties objects into one.

Wir werden drei Lösungen untersuchen, zunächst mit einem Beispiel mit Iteration. Als Nächstes werden wir uns mit der MethodeputAll()befassen und zum Abschluss des Tutorials einen moderneren Ansatz mit Java 8-Streams betrachten.

Um zu erfahren, wie Sie mit Java-Eigenschaften beginnen, lesen Sie unsereintroductory article.

2. Eine kurze Zusammenfassung der Verwendung von Eigenschaften

Beginnen wir damit, uns an einige der Schlüsselkonzepte von Eigenschaften zu erinnern.

We typically use properties in our applications to define configuration values. In Java repräsentieren wir diese Werte mit einfachen Schlüssel / Wert-Paaren. Außerdem sind der Schlüssel und der Wert beideString-Werte in jedem dieser Paare.

Normalerweise verwenden wir die Klassejava.util.Properties, um diese Wertepaare darzustellen und zu verwalten. It is important to note that this class inherits from Hashtable.

Um mehr über die Datenstruktur vonHashtablezu erfahren, lesen Sie unsereIntroduction to Java.util.Hashtable.

2.1. Eigenschaften einrichten

Um die Dinge einfach zu halten, richten wir die Eigenschaften programmgesteuert für unsere Beispiele ein:

private Properties propertiesA() {
    Properties properties = new Properties();
    properties.setProperty("application.name", "my-app");
    properties.setProperty("application.version", "1.0");
    return properties;
}

Im obigen Beispiel erstellen wir einProperties-Objekt und verwenden diesetProperty()-Methode, um zwei Eigenschaften festzulegen. Intern ruft dies dieput()-Methode aus derHashtable-Klasse auf, stellt jedoch sicher, dass die ObjekteString-Werte sind.

Es wird dringend davon abgeraten, die Methodeput() direkt zu verwenden, da der Aufrufer Einträge einfügen kann, deren Schlüssel oder Werte nichtStrings sind.

3. Zusammenführen von Eigenschaften mithilfe von Iteration

Schauen wir uns nun an, wie wir zwei oder mehr Eigenschaftenobjekte mithilfe der Iteration zusammenführen können:

private Properties mergePropertiesByIteratingKeySet(Properties... properties) {
    Properties mergedProperties = new Properties();
    for (Properties property : properties) {
        Set propertyNames = property.stringPropertyNames();
        for (String name : propertyNames) {
            String propertyValue = property.getProperty(name);
            mergedProperties.setProperty(name, propertyValue);
        }
    }
    return mergedProperties;
}

Lassen Sie uns dieses Beispiel in Schritte unterteilen:

  1. Zuerst erstellen wir einProperties-Objekt, um alle unsere zusammengeführten Eigenschaften zu speichern

  2. Als nächstes durchlaufen wir dieProperties-Objekte, die wir zusammenführen möchten

  3. Wir rufen dann diestringPropertyNames() -Smethod auf, um eine Reihe von Eigenschaftsnamen zu erhalten

  4. Dann durchlaufen wir alle Eigenschaftsnamen und erhalten den Eigenschaftswert für jeden Namen

  5. Zuletzt setzen wir den Eigenschaftswert in die Variable, die wir in Schritt 1 erstellt haben

4. Verwenden derputAll()-Methode

Jetzt sehen wir uns eine andere gängige Lösung zum Zusammenführen von Eigenschaften mit der MethodeputAll()an:

private Properties mergePropertiesByUsingPutAll(Properties... properties) {
    Properties mergedProperties = new Properties();
    for (Properties property : properties) {
        mergedProperties.putAll(property);
    }
    return mergedProperties;
}

In unserem zweiten Beispiel erstellen wir erneut zuerst einProperties-Objekt, um alle unsere zusammengeführten Eigenschaften namensmergedProperties zu speichern. Ebenso durchlaufen wir dann die Objekte vonProperties, die wir zusammenführen möchten, aber dieses Mal fügen wir jedesProperties-Objekt mit der MethodeputAll()der VariablenmergedProperties hinzu.

Die MethodeputAll() ist eine weitere Methode, die vonHashtable geerbt wird. This method allows us to copy all of the mappings from the specified Properties into our new Properties object.

Es ist erwähnenswert, dass die Verwendung vonputAll() mit jeder Art vonMap is ebenfalls nicht empfohlen wird, da wir möglicherweise Einträge erhalten, deren Schlüssel oder Werte nichtStrings sind

5. Zusammenführen von Eigenschaften mit der Stream-API

Abschließend sehen wir uns an, wie Sie mit der Stream-API mehr als einProperties-Objekt zusammenführen:

private Properties mergePropertiesByUsingStreamApi(Properties... properties) {
    return Stream.of(properties)
        .collect(Properties::new, Map::putAll, Map::putAll);
}

In unserem letzten Beispiel erstellen wir einStream  aus unserer Liste von Eigenschaften und verwenden dann diecollect -Smethod, um die Folge von Werten im Stream in ein neuesCollection zu reduzieren. The first argument is a Supplier function used to create a new result container which in our case is a new Properties object.

Die Stream-API wurde in Java 8 eingeführt. Wir haben eine Anleitung zugetting started mit dieser API.

6. Fazit

In diesem kurzen Tutorial haben wir drei verschiedene Möglichkeiten zum Zusammenführen von zwei oder mehrProperties-Objekten behandelt.

Wie immer sind die Beispiele inGitHub repositoryverfügbar.