Java 8 StringJoiner

1. Pengenalan

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

Secara sederhana, ia dapat digunakan untuk bergabung dengan Strings yang menggunakan pembatas, awalan, dan akhiran.

2. Menambah Elemen

Kita boleh menambah String menggunakan kaedah 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]"); }

Sekiranya kita mahu bergabung dengan semua elemen dalam senarai, kita mesti melihat senarai tersebut. Malangnya, tidak ada cara mudah untuk melakukannya dengan 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. Pembinaan

Untuk membina contoh StringJoiner, kita perlu menyebut pembatasnya. Sebagai pilihan, kami juga dapat menentukan awalan dan akhiran yang harus ada pada hasilnya:

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 semasa dari alat gabung.

Perhatikan nilai lalai yang dikembalikan oleh penyertaan. A Joiner tanpa awalan dan akhiran pulangan kosong String manakala joiner dengan awalan dan akhiran pulangan yang String mengandungi kedua-dua awalan dan akhiran.

Kita boleh mengubah String lalai 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-dua penyambung mengembalikan pemalar EMPTY_JOINER .

Nilai lalai dikembalikan hanya apabila StringJoiner kosong.

4. Gabungkan Penyertaan

Kita boleh menggabungkan dua penggabung menggunakan gabungan () . Ia menambahkan kandungan StringJoiner yang diberikan tanpa awalan dan akhiran sebagai elemen seterusnya:

@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. Aliran API

Itu semua yang dapat kita lakukan dengan StringJoiner .

Terdapat satu lagi penggunaan tidak langsung yang boleh didapati 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 dalaman menggunakan StringJoiner untuk melakukan operasi bergabung.

6. Kesimpulannya

Dalam tutorial ringkas ini, kami menggambarkan cara menggunakan kelas StringJoiner . Secara keseluruhan, StringJoiner kelihatan sangat primitif dan gagal menangani beberapa kes penggunaan asas seperti menggabungkan unsur-unsur dalam senarai. Ia nampaknya dirancang terutamanya untuk Pengumpul .

Sekiranya StringJoiner tidak memenuhi syarat kami, terdapat perpustakaan lain yang terkenal dan hebat, seperti Jambu Batu .

Seperti biasa, semua sumber boleh didapati di GitHub.