Java >> Java tutorial >  >> Tag >> java.util

Sammenlægning af java.util.Properties-objekter

1. Introduktion

I denne korte selvstudie, vil vi fokusere på, hvordan du flette to eller flere Java Egenskaber objekter i ét.

Vi vil udforske tre løsninger, for det første starter med et eksempel ved hjælp af iteration. Dernæst vil vi se på at bruge putAll() metode og for at afslutte selvstudiet, vil vi se på en mere moderne tilgang ved hjælp af Java 8 Streams.

Se vores introduktionsartikel for at lære, hvordan du kommer i gang med Java Properties.

2. En hurtig opsummering af brugen af ​​egenskaber

Lad os starte med at minde os selv om nogle af nøglebegreberne for egenskaber.

Vi bruger typisk egenskaber i vores applikationer til at definere konfigurationsværdier . I Java repræsenterer vi disse værdier ved hjælp af simple nøgle/værdi-par. Derudover er nøglen og værdien begge String værdier i hvert af disse par.

Normalt bruger vi java.util.Properties klasse til at repræsentere og administrere disse værdipar. Det er vigtigt at bemærke, at denne klasse arver fra Hashtable .

For at lære mere om Hashtable datastruktur læs vores Introduktion til Java.util.Hashtable.

2.1. Opsætning af egenskaber

For at gøre tingene enkle vil vi opsætte egenskaberne programmatisk for vores eksempler:

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

I ovenstående eksempel opretter vi en Egenskaber objekt og brug setProperty() metode til at angive to egenskaber. Internt kalder dette put() metode fra Hashtable klasse, men sikrer, at objekterne er String værdier.

Bemærk, det frarådes kraftigt at bruge put() metode direkte, da den tillader den, der ringer, at indsætte poster, hvis nøgler eller værdier ikke er Strings .

3. Sammenfletning af egenskaber ved hjælp af iteration

Lad os nu se på, hvordan vi kan flette to eller flere egenskabsobjekter ved hjælp af iteration:

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

Lad os opdele dette eksempel i trin:

  1. Først opretter vi en Egenskaber protesterer mod at beholde alle vores fusionerede ejendomme
  2. Dernæst går vi over Egenskaberne objekter, vi skal flette
  3. Vi kalder derefter stringPropertyNames()  metode til at få et sæt egenskabsnavne
  4. Så går vi gennem alle egenskabsnavnene og får egenskabsværdien for hvert navn
  5. Til sidst sætter vi egenskabsværdien i den variabel, vi oprettede i trin 1

4. Brug af putAll() Metode

Nu vil vi se på en anden almindelig løsning til at flette egenskaber ved hjælp af putAll() metode:

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

I vores andet eksempel opretter vi igen først en Egenskaber objekt for at holde alle vores flettede egenskaber kaldet mergedProperties . Ligeledes går vi derefter gennem Egenskaberne objekter, vi skal flette, men denne gang tilføjer vi hver Egenskaber gøre indsigelse mod mergedProperties  variabel ved hjælp af putAll() metode.

putAll() metode er en anden metode, som er nedarvet fra Hashtable . Denne metode giver os mulighed for at kopiere alle tilknytninger fra de angivne egenskaber ind i vores nye Ejendomme objekt.

Det er værd at nævne, at brugen af ​​putAll()  med enhver form for Kort  frarådes også, da vi kan ende med poster, hvis nøgler eller værdier ikke er Strings

5. Sammenfletning af egenskaber med Stream API

Til sidst vil vi se på, hvordan du bruger Stream API til at flette mere end én egenskab objekt:

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

I vores sidste eksempel opretter vi en Strøm  fra vores liste over ejendomme, og brug derefter collect  metode til at reducere rækkefølgen af ​​værdier i strømmen til en ny samling . Det første argument er en leverandør funktion, der bruges til at oprette en ny resultatbeholder, som i vores tilfælde er en ny Egenskaber objekt.

Stream API'et blev introduceret i Java 8, vi har en guide til at komme i gang med denne API.

6. Konklusion

I dette korte selvstudium dækkede vi tre forskellige måder at fusionere to eller flere egenskaber på genstande.

Som altid er eksemplerne tilgængelige i vores GitHub-lager.


Java tag