Jambu Batu - Bergabung dan Berpisah Koleksi

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan belajar bagaimana untuk menggunakan yang Joiner dan Splitter di perpustakaan Guava yang . Kami akan menukar koleksi menjadi String dengan Joiner dan kami akan membahagikan String menjadi koleksi dengan Splitter .

2. Tukarkan Senarai menjadi Rentetan Menggunakan Joiner

Mari kita mulakan dengan contoh mudah untuk menggabungkan Senarai ke Rentetan menggunakan Joiner . Dalam contoh berikut, kami menggabungkan Senarai 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. Tukarkan Peta ke Rentetan Menggunakan Joiner

Seterusnya - mari kita lihat bagaimana menggunakan Joiner untuk menukar Peta menjadi Rentetan . 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. Sertai Koleksi Bersarang

Sekarang - mari lihat cara menggabungkan koleksi bersarang ke dalam String . Dalam contoh berikut, kami bergabung dengan hasil mengubah setiap Senarai menjadi Rentetan :

@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 Semasa Menggunakan Joiner

Sekarang - mari kita lihat pelbagai cara untuk Menangani Nilai Null Semasa Menggunakan Joiner.

Untuk melangkau nilai nol semasa menyertai koleksi, gunakan skipNulls () seperti dalam 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"); }

Sekiranya anda tidak mahu melangkau nilai nol dan ingin menggantinya , gunakan useForNull () seperti dalam 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 bahawa useForNull () tidak mengubah senarai asal, ia hanya mempengaruhi output dari gabungan.

6. Buat Senarai Dari Rentetan Menggunakan Splitter

Sekarang - mari kita lihat bagaimana membahagi String menjadi Senarai . Dalam contoh berikut, kami menggunakan pemisah “-” untuk memisahkan input String to 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 bahawa trimResults () menghilangkan ruang kosong utama dan belakang dari substring yang dihasilkan.

7. Buat Peta Dari Rentetan Menggunakan Splitter

Seterusnya - mari kita lihat bagaimana Membuat Peta dari String Menggunakan Splitter. Dalam contoh berikut, kami menggunakan withKeyValueSeparator () untuk memisahkan 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. String Berpisah Dengan Pelbagai Pemisah

Sekarang - mari kita lihat cara membelah String dengan beberapa pemisah. Dalam contoh berikut, kami menggunakan kedua "." 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 bahawa omitEmptyStrings () mengabaikan rentetan kosong dan tidak menambahkannya ke Senarai yang dihasilkan .

9. Pisahkan Rentetan pada Panjang Tertentu

Seterusnya - mari kita lihat pemisahan String pada panjang tertentu. Dalam contoh berikut, kami membahagikan String kami setiap 3 watak:

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

10. Hadkan Hasil Terpisah

Akhirnya - mari kita lihat bagaimana Mengehadkan Hasil Terpisah. Jika anda mahu Splitter untuk berhenti membelah selepas nombor tertentu barangan - Penggunaan had () 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. Kesimpulannya

Dalam tutorial ini kami menggambarkan cara menggunakan Joiner dan Splitter di Jambu untuk melakukan pelbagai transformasi antara koleksi dan Strings.

Pelaksanaan semua contoh dan coretan kod ini terdapat di projek Guava github saya - ini adalah projek berasaskan Eclipse, jadi semestinya mudah diimport dan dijalankan sebagaimana adanya.