Java 8 StringJoiner
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について]で見つけることができます。