Java 8 StringJoiner

1. Perkenalan

StringJoiner adalah kelas baru yang ditambahkan di Java 8 di bawah paket java.util .

Sederhananya, ini dapat digunakan untuk menggabungkan Strings menggunakan pembatas, prefiks, dan sufiks.

2. Menambahkan Elemen

Kita bisa menambahkan Strings menggunakan metode add () :

@Test public void whenAddingElements_thenJoinedElements() { StringJoiner joiner = new StringJoiner(",", PREFIX, SUFFIX); joiner.add("Red") .add("Green") .add("Blue"); assertEquals(joiner.toString(), "[Red,Green,Blue]"); }

Jika kita ingin menggabungkan semua elemen daftar, kita harus mengulang melalui daftar. Sayangnya, tidak ada cara mudah untuk melakukannya menggunakan StringJoiner :

@Test public void whenAddingListElements_thenJoinedListElements() { List 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. Konstruksi

Untuk membuat instance StringJoiner, kita perlu menyebutkan pembatas. Secara opsional, kita juga bisa menentukan awalan dan sufiks yang harus ada dalam hasil:

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

Kami menggunakan toString () untuk mendapatkan nilai saat ini dari joiner.

Perhatikan nilai default yang dikembalikan oleh joiner. Sebuah Joiner tanpa awalan dan akhiran kembali kosong String sedangkan joiner dengan awalan dan akhiran kembali sebuah String mengandung awalan dan akhiran.

Kita bisa mengubah String default yang dikembalikan dengan menggunakan setEmptyValue () :

@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"); }

Di sini, kedua joiner mengembalikan konstanta EMPTY_JOINER .

Nilai default dikembalikan hanya ketika StringJoiner kosong.

4. Gabungkan Joiners

Kita bisa menggabungkan dua joiner menggunakan merge () . Ini menambahkan konten dari StringJoiner yang diberikan tanpa awalan dan akhiran sebagai elemen berikutnya:

@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]"); }

Perhatikan bagaimana “-“ digunakan untuk menggabungkan konten cmybJoiner sementara rgbJoiner masih menggunakan “,”.

5. API Streaming

Cukup banyak yang dapat kita lakukan dengan StringJoiner .

Ada satu lagi penggunaan tidak langsung yang dapat ditemukan di Stream API:

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

Collectors.joining () secara internal menggunakan StringJoiner untuk melakukan operasi penggabungan.

6. Kesimpulan

Dalam tutorial singkat ini, kami mengilustrasikan cara menggunakan kelas StringJoiner . Secara keseluruhan StringJoiner tampak sangat primitif dan gagal menangani beberapa kasus penggunaan dasar seperti bergabung dengan elemen daftar. Tampaknya ini terutama dirancang untuk Kolektor .

Jika StringJoiner tidak memenuhi persyaratan kami, ada pustaka populer dan hebat lainnya, seperti Guava .

Dan, seperti biasa, semua sumber dapat ditemukan di GitHub.