1. 序章

この短いチュートリアルでは、2つ以上のJavaプロパティオブジェクトを1つにマージする方法に焦点を当てます。

最初に反復を使用した例から始めて、3つのソリューションを検討します。 次に、 putAll()メソッドの使用を検討し、チュートリアルを終了するために、Java8ストリームを使用したより最新のアプローチを検討します。

Javaプロパティの使用を開始する方法については、紹介記事をご覧ください。

2. プロパティの使用に関する簡単な要約

プロパティの重要な概念のいくつかを思い出すことから始めましょう。

通常、アプリケーションでプロパティを使用して構成値を定義します。 Javaでは、単純なキーと値のペアを使用してこれらの値を表します。 さらに、キーと値は、これらの各ペアのString値です。

通常、 java.util.Properties クラスを使用して、これらの値のペアを表し、管理します。 このクラスはHashtableから継承することに注意することが重要です。

Hashtable データ構造の詳細については、Java.util.Hashtableの概要を参照してください。

2.1. プロパティの設定

物事を単純にするために、例のためにプログラムでプロパティを設定します。

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

上記の例では、 Properties オブジェクトを作成し、 setProperty()メソッドを使用して2つのプロパティを設定します。 内部的には、これは Hashtableクラスからput()メソッドを呼び出しますが、オブジェクトがString値であることを保証します。

put()メソッドを直接使用することはお勧めしません。これにより、呼び出し元は、キーまたは値がStringsではないエントリを挿入できるようになります。

3. 反復を使用したプロパティのマージ

次に、反復を使用して2つ以上のプロパティオブジェクトをマージする方法を見てみましょう。

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

この例をいくつかのステップに分けてみましょう。

  1. まず、 Properties オブジェクトを作成して、マージされたすべてのプロパティを保持します
  2. 次に、マージするPropertiesオブジェクトをループします
  3. 次に、 stringPropertyNames()メソッドを呼び出して、プロパティ名のセットを取得します
  4. 次に、すべてのプロパティ名をループして、各名前のプロパティ値を取得します
  5. 最後に、手順1で作成した変数にプロパティ値を設定します。

4. putAll()メソッドの使用

次に、 putAll()メソッドを使用してプロパティをマージするための別の一般的なソリューションを見ていきます。

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

2番目の例でも、最初に Properties オブジェクトを作成して、mergedPropertiesと呼ばれるすべてのマージされたプロパティを保持します。 同様に、次に、マージする Properties オブジェクトを反復処理しますが、今回は、 putAllを使用して、各PropertiesオブジェクトをmergedProperties変数に追加します。 ()メソッド。

putAll()メソッドは、Hashtableから継承されたもう1つのメソッドです。 このメソッドを使用すると、指定したプロパティから新しいプロパティオブジェクトにすべてのマッピングをコピーできます。

キーまたは値がStringsでないエントリになる可能性があるため、 putAll()をあらゆる種類のMapで使用することもお勧めしません。 ]

5. プロパティとStreamAPIのマージ

最後に、StreamAPIを使用して複数のPropertiesオブジェクトをマージする方法を見ていきます。

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

最後の例では、プロパティのリストから Stream を作成し、 collect メソッドを使用して、ストリーム内の値のシーケンスを新しいCollectionに減らします。 ]。 最初の引数は、新しい結果コンテナを作成するために使用されるサプライヤ関数です。この場合は、新しいプロパティオブジェクトです。

StreamAPIはJava8で導入されました。このAPIのはじめにに関するガイドがあります。

6. 結論

この簡単なチュートリアルでは、2つ以上のPropertiesオブジェクトをマージするための3つの異なる方法について説明しました。

いつものように、例はGitHubリポジトリで入手できます。