1前書き


StringJoiner

は、Java 8の

java.util

パッケージに追加された新しいクラスです。

簡単に言うと、** 区切り文字、プレフィックス、およびサフィックスを使用して

Strings

を結合するために使用できます。

** 2要素を追加する

**


add()

メソッドを使用して

Strings

を追加できます。

@Test
public void whenAddingElements__thenJoinedElements() {
    StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX);
    joiner.add("Red")
      .add("Green")
      .add("Blue");

    assertEquals(joiner.toString(), "[Red,Green,Blue]");
}

リストのすべての要素を結合したい場合は、リストをループする必要があります。残念ながら、

StringJoiner

を使ってそれを行う簡単な方法はありません。

@Test
public void whenAddingListElements__thenJoinedListElements() {
    List<String> rgbList = new ArrayList<>();
    rgbList.add("Red");
    rgbList.add("Green");
    rgbList.add("Blue");

    StringJoiner rgbJoiner = new StringJoiner(
      ",", PREFIX, SUFFIX);

    for (String color : rgbList) {
        rgbJoiner.add(color);
    }

    assertEquals(rgbJoiner.toString(), "[Red,Green,Blue]");
}


3建設


  • StringJoinerのインスタンスを作成するには、

    デリミタについて言及する必要があります。

private String PREFIX = "[";
private String SUFFIX = "]";

@Test
public void whenEmptyJoinerWithoutPrefixSuffix__thenEmptyString() {
    StringJoiner joiner = new StringJoiner(",");

    assertEquals(0, joiner.toString().length());
}

@Test
public void whenEmptyJoinerJoinerWithPrefixSuffix__thenPrefixSuffix() {
    StringJoiner joiner = new StringJoiner(
      ",", PREFIX, SUFFIX);

    assertEquals(joiner.toString(), PREFIX + SUFFIX);
}

ジョイナから現在の値を取得するために

toString()

を使用します。

結合者から返されるデフォルト値に注意してください。 ** 接頭辞と接尾辞のない

Joiner

は空の

String

を返し、接頭辞と接尾辞のあるjoinerは接頭辞と接尾辞の両方を含む

String

を返します。


setEmptyValue()

を使用して、返されるデフォルトの

String

を変更できます。

@Test
public void whenEmptyJoinerWithEmptyValue__thenDefaultValue() {
    StringJoiner joiner = new StringJoiner(",");
    joiner.setEmptyValue("default");

    assertEquals(joiner.toString(), "default");
}

@Test
public void whenEmptyJoinerWithPrefixSuffixAndEmptyValue__thenDefaultValue() {
    StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX);
    joiner.setEmptyValue("default");

    assertEquals(joiner.toString(), "default");
}

ここでは、両方の結合子が

EMPTY

JOINER__定数を返します。


  • StringJoiner

    が空の場合にのみデフォルト値が返されます。

** 4参加者をマージ

**


merge()

を使用して2人の参加者をマージすることができます。次の要素として、指定された

StringJoiner


の内容をプレフィックスとサフィックス

なしで追加します。

@Test
public void whenMergingJoiners__thenReturnMerged() {
    StringJoiner rgbJoiner = new StringJoiner(
      ",", PREFIX, SUFFIX);
    StringJoiner cmybJoiner = new StringJoiner(
      "-", PREFIX, SUFFIX);

    rgbJoiner.add("Red")
      .add("Green")
      .add("Blue");
    cmybJoiner.add("Cyan")
      .add("Magenta")
      .add("Yellow")
      .add("Black");

    rgbJoiner.merge(cmybJoiner);

    assertEquals(
      rgbJoiner.toString(),
      "[Red,Green,Blue,Cyan-Magenta-Yellow-Black]");
}


  • rgbJoiner

    は依然として

    “、”を使用していますが、

    “ – “



    cmybJoiner__の内容を連結するためにどのように使用されるかに注意してください

** 5

Stream

API

**

それが

StringJoiner

でできることのほとんどすべてです。


Stream

APIには、もう1つの間接的な使用方法があります。

@Test
public void whenUsedWithinCollectors__thenJoined() {
    List<String> rgbList = Arrays.asList("Red", "Green", "Blue");
    String commaSeparatedRGB = rgbList.stream()
      .map(color -> color.toString())
      .collect(Collectors.joining(","));

    assertEquals(commaSeparatedRGB, "Red,Green,Blue");
}


  • Collectors.joining()

    は結合操作を実行するために内部的に

    StringJoiner

    を使用します。


6. 結論

このクイックチュートリアルでは、

StringJoiner

クラスの使い方を説明しました。全体として、

StringJoiner

は非常に原始的に見え、リストの要素を結合するようないくつかの基本的なユースケースには対処できません。それは主に__Collectorのために設計されているようです。


StringJoiner

が我々の要件を満たしていない場合は、

Guava

など、他にも一般的で強力なライブラリがあります。

そして、いつものように、すべてのソースはhttps://github.com/eugenp/tutorials/tree/master/java-strings[GitHubについて]で見つけることができます。