Guava - Gabung dan Pisahkan Koleksi

1. Ikhtisar

Dalam tutorial ini, kita akan belajar bagaimana menggunakan yang Joiner dan Splitter di perpustakaan jambu . Kami akan mengonversi koleksi menjadi String dengan Joiner dan kami akan membagi String menjadi koleksi dengan Splitter .

2. Ubah List menjadi String Menggunakan Joiner

Mari kita mulai dengan contoh sederhana untuk menggabungkan List menjadi String menggunakan Joiner . Dalam contoh berikut, kami menggabungkan Daftar nama menjadi satu String menggunakan koma “,” sebagai pemisah:

@Test public void whenConvertListToString_thenConverted() { List names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); String result = Joiner.on(",").join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

3. Ubah Map menjadi String Menggunakan Joiner

Selanjutnya - mari kita lihat bagaimana menggunakan Joiner untuk mengonversi Peta menjadi String . Dalam contoh berikut, kami menggunakan withKeyValueSeparator () untuk menggabungkan kunci dengan nilainya:

@Test public void whenConvertMapToString_thenConverted() { Map salary = Maps.newHashMap(); salary.put("John", 1000); salary.put("Jane", 1500); String result = Joiner.on(" , ").withKeyValueSeparator(" = ") .join(salary); assertThat(result, containsString("John = 1000")); assertThat(result, containsString("Jane = 1500")); }

4. Bergabunglah dengan Koleksi Bersarang

Sekarang - mari kita lihat cara menggabungkan koleksi bersarang ke dalam String . Dalam contoh berikut, kami menggabungkan hasil dari mengubah setiap Daftar menjadi String :

@Test public void whenJoinNestedCollections_thenJoined() { List
    
      nested = Lists.newArrayList( Lists.newArrayList("apple", "banana", "orange"), Lists.newArrayList("cat", "dog", "bird"), Lists.newArrayList("John", "Jane", "Adam")); String result = Joiner.on(";").join(Iterables.transform(nested, new Function
     
      () { @Override public String apply(List input) { return Joiner.on("-").join(input); } })); assertThat(result, containsString("apple-banana-orange")); assertThat(result, containsString("cat-dog-bird")); assertThat(result, containsString("apple-banana-orange")); }
     
    

5. Tangani Nilai Null Saat Menggunakan Joiner

Sekarang - mari kita lihat cara berbeda untuk Menangani Nilai Null Saat Menggunakan Joiner.

Untuk melewati nilai null saat bergabung dengan collection, gunakan skipNulls () seperti pada contoh berikut:

@Test public void whenConvertListToStringAndSkipNull_thenConverted() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").skipNulls().join(names); assertEquals(result, "John,Jane,Adam,Tom"); }

Jika Anda tidak ingin melewatkan nilai null dan ingin menggantinya , gunakan useForNull () seperti pada contoh berikut:

@Test public void whenUseForNull_thenUsed() { List names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom"); String result = Joiner.on(",").useForNull("nameless").join(names); assertEquals(result, "John,nameless,Jane,Adam,Tom"); }

Perhatikan bahwa useForNull () tidak mengubah daftar asli, ini hanya memengaruhi output gabungan.

6. Membuat Daftar Dari String Menggunakan Splitter

Sekarang - mari kita lihat cara membagi String menjadi Daftar . Dalam contoh berikut, kami menggunakan pemisah "-" untuk memisahkan input String ke List :

@Test public void whenCreateListFromString_thenCreated() { String input = "apple - banana - orange"; List result = Splitter.on("-").trimResults() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

Perhatikan bahwa trimResults () menghapus spasi kosong di depan dan di belakang dari substring yang dihasilkan.

7. Membuat Peta Dari String Menggunakan Splitter

Selanjutnya - mari kita lihat bagaimana Membuat Peta dari String Menggunakan Splitter. Dalam contoh berikut, kami menggunakan withKeyValueSeparator () untuk membagi String menjadi Peta :

@Test public void whenCreateMapFromString_thenCreated() { String input = "John=first,Adam=second"; Map result = Splitter.on(",") .withKeyValueSeparator("=") .split(input); assertEquals("first", result.get("John")); assertEquals("second", result.get("Adam")); }

8. Pisahkan String Dengan Beberapa Pemisah

Sekarang - mari kita lihat cara membagi String dengan beberapa pemisah. Pada contoh berikut, kami menggunakan "." dan “,” untuk memisahkan String kami :

@Test public void whenSplitStringOnMultipleSeparator_thenSplit() { String input = "apple.banana,,orange,,."; List result = Splitter.onPattern("[.,]") .omitEmptyStrings() .splitToList(input); assertThat(result, contains("apple", "banana", "orange")); }

Perhatikan bahwa omitEmptyStrings () mengabaikan string kosong dan tidak menambahkannya ke Daftar yang dihasilkan .

9. Pisahkan String pada Panjang Tertentu

Selanjutnya - mari kita lihat pemisahan String pada panjang tertentu. Dalam contoh berikut, kami membagi String kami setiap 3 karakter:

@Test public void whenSplitStringOnSpecificLength_thenSplit() { String input = "Hello world"; List result = Splitter.fixedLength(3).splitToList(input); assertThat(result, contains("Hel", "lo ", "wor", "ld")); }

10. Batasi Hasil Split

Akhirnya - mari kita lihat bagaimana Membatasi Hasil Split. Jika Anda ingin Splitter untuk berhenti membelah setelah jumlah tertentu item - penggunaan limit () seperti dalam contoh berikut:

@Test public void whenLimitSplitting_thenLimited() { String input = "a,b,c,d,e"; List result = Splitter.on(",") .limit(4) .splitToList(input); assertEquals(4, result.size()); assertThat(result, contains("a", "b", "c", "d,e")); }

11. Kesimpulan

Dalam tutorial ini kami mengilustrasikan cara menggunakan Joiner dan Splitter di Guava untuk melakukan berbagai transformasi antara collection dan Strings.

Penerapan semua contoh dan cuplikan kode ini dapat ditemukan di proyek github Guava saya - ini adalah proyek berbasis Eclipse, jadi semestinya mudah untuk mengimpor dan menjalankannya apa adanya.