Sertailah dan Pisahkan Susunan dan Koleksi di Java

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar bagaimana bergabung dan membagi Array dan Koleksi di Java, memanfaatkan sokongan aliran baru dengan baik .

2. Bergabung dengan Dua Susunan

Mari mulakan dengan menggabungkan dua Array bersama-sama menggunakan Stream.concat :

@Test public void whenJoiningTwoArrays_thenJoined() { String[] animals1 = new String[] { "Dog", "Cat" }; String[] animals2 = new String[] { "Bird", "Cow" }; String[] result = Stream.concat( Arrays.stream(animals1), Arrays.stream(animals2)).toArray(String[]::new); assertArrayEquals(result, new String[] { "Dog", "Cat", "Bird", "Cow" }); }

3. Sertailah Dua Koleksi

Mari kita sama-sama bergabung dengan dua Koleksi:

@Test public void whenJoiningTwoCollections_thenJoined() { Collection collection1 = Arrays.asList("Dog", "Cat"); Collection collection2 = Arrays.asList("Bird", "Cow", "Moose"); Collection result = Stream.concat( collection1.stream(), collection2.stream()) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow", "Moose"))); }

4. Sertai Dua Koleksi dengan Penapis

Sekarang, mari sertai dua Koleksi nombor yang menyaring lebih daripada 10:

@Test public void whenJoiningTwoCollectionsWithFilter_thenJoined() { Collection collection1 = Arrays.asList("Dog", "Cat"); Collection collection2 = Arrays.asList("Bird", "Cow", "Moose"); Collection result = Stream.concat( collection1.stream(), collection2.stream()) .filter(e -> e.length() == 3) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Cow"))); }

5. Sertai Array Ke Rentetan

Seterusnya, mari bergabung dengan Array ke dalam String menggunakan Pengumpul:

@Test public void whenConvertArrayToString_thenConverted() { String[] animals = new String[] { "Dog", "Cat", "Bird", "Cow" }; String result = Arrays.stream(animals).collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Bird, Cow"); }

6. Sertai Koleksi Ke Rentetan

Mari lakukan perkara yang sama tetapi dengan Koleksi :

@Test public void whenConvertCollectionToString_thenConverted() { Collection animals = Arrays.asList("Dog", "Cat", "Bird", "Cow"); String result = animals.stream().collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Bird, Cow"); }

7. Bergabung dengan Peta Menjadi Rentetan

Seterusnya, mari buat String dari Peta .

Prosesnya sangat serupa dengan contoh sebelumnya, tetapi di sini kita mempunyai langkah tambahan untuk bergabung dengan setiap Entri Peta :

@Test public void whenConvertMapToString_thenConverted() { Map animals = new HashMap(); animals.put(1, "Dog"); animals.put(2, "Cat"); animals.put(3, "Cow"); String result = animals.entrySet().stream() .map(entry -> entry.getKey() + " = " + entry.getValue()) .collect(Collectors.joining(", ")); assertEquals(result, "1 = Dog, 2 = Cat, 3 = Cow"); }

8. Sertai Koleksi Bersarang Menjadi Rentetan

Mari buat sesuatu yang lebih kompleks. Mari sertai beberapa Koleksi bersarang menjadi Rentetan .

Dalam contoh berikut, kami mula-mula bergabung dalam setiap Koleksi bersarang dan kemudian kami bergabung dengan hasil masing-masing:

@Test public void whenConvertNestedCollectionToString_thenConverted() { Collection
    
      nested = new ArrayList(); nested.add(Arrays.asList("Dog", "Cat")); nested.add(Arrays.asList("Cow", "Pig")); String result = nested.stream().map( nextList -> nextList.stream() .collect(Collectors.joining("-"))) .collect(Collectors.joining("; ")); assertEquals(result, "Dog-Cat; Cow-Pig"); }
    

9. Menangani Nilai Nol Semasa Bergabung

Mari kita lihat bagaimana kita boleh menggunakan Penapis untuk melangkau sebarang nilai nol :

@Test public void whenConvertCollectionToStringAndSkipNull_thenConverted() { Collection animals = Arrays.asList("Dog", "Cat", null, "Moose"); String result = animals.stream() .filter(Objects::nonNull) .collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Moose"); }

10. Pisahkan Koleksi dalam Dua

Mari bahagikan Koleksi nombor menjadi dua Koleksi di tengah:

@Test public void whenSplitCollectionHalf_thenConverted() { Collection animals = Arrays.asList( "Dog", "Cat", "Cow", "Bird", "Moose", "Pig"); Collection result1 = new ArrayList(); Collection result2 = new ArrayList(); AtomicInteger count = new AtomicInteger(); int midpoint = Math.round(animals.size() / 2); animals.forEach(next -> { int index = count.getAndIncrement(); if (index < midpoint) { result1.add(next); } else { result2.add(next); } }); assertTrue(result1.equals(Arrays.asList("Dog", "Cat", "Cow"))); assertTrue(result2.equals(Arrays.asList("Bird", "Moose", "Pig"))); }

11. Pisahkan Array dengan Panjang Kata

Seterusnya, mari kita bahagikan susunan dengan panjang perkataan:

@Test public void whenSplitArrayByWordLength_thenConverted() { String[] animals = new String[] { "Dog", "Cat", "Bird", "Cow", "Pig", "Moose"}; Map
    
      result = Arrays.stream(animals) .collect(Collectors.groupingBy(String::length)); assertTrue(result.get(3).equals(Arrays.asList("Dog", "Cat", "Cow", "Pig"))); assertTrue(result.get(4).equals(Arrays.asList("Bird"))); assertTrue(result.get(5).equals(Arrays.asList("Moose"))); }
    

12. Pisahkan Rentetan Ke Array

Mari sekarang lakukan sebaliknya, mari kita bahagikan String menjadi Array:

@Test public void whenConvertStringToArray_thenConverted() { String animals = "Dog, Cat, Bird, Cow"; String[] result = animals.split(", "); assertArrayEquals(result, new String[] { "Dog", "Cat", "Bird", "Cow" }); }

13. Rentetan dalam Koleksi

Contoh ini serupa dengan yang sebelumnya, hanya ada langkah tambahan untuk menukar dari Array ke Koleksi :

@Test public void whenConvertStringToCollection_thenConverted() { String animals = "Dog, Cat, Bird, Cow"; Collection result = Arrays.asList(animals.split(", ")); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow"))); }

14. Pisahkan Rentetan Ke dalam Peta

Sekarang, mari buat Peta dari Rentetan . Kita perlu memisahkan rentetan kita dua kali, sekali untuk setiap entri, dan terakhir kali untuk kunci dan nilai:

@Test public void whenConvertStringToMap_thenConverted() { String animals = "1 = Dog, 2 = Cat, 3 = Bird"; Map result = Arrays.stream( animals.split(", ")).map(next -> next.split(" = ")) .collect(Collectors.toMap(entry -> Integer.parseInt(entry[0]), entry -> entry[1])); assertEquals(result.get(1), "Dog"); assertEquals(result.get(2), "Cat"); assertEquals(result.get(3), "Bird"); }

15. String Berpisah Dengan Beberapa Pemisah

Akhirnya, mari kita memisahkan String yang mempunyai beberapa pemisah menggunakan ungkapan biasa, kami juga akan mengeluarkan hasil kosong:

@Test public void whenConvertCollectionToStringMultipleSeparators_thenConverted() .]")) .map(String::trim) .filter(next -> !next.isEmpty()) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow"))); 

16. Kesimpulannya

Dalam tutorial ini, memanfaatkan fungsi String.split sederhana dan Aliran Java 8 yang kuat , kami menggambarkan cara bergabung dan memisahkan Susunan dan Koleksi.

Anda boleh mendapatkan kod artikel ini di GitHub.