Meratakan Koleksi Bersarang di Java

1. Ikhtisar

Dalam artikel singkat ini, kita akan mempelajari cara meratakan koleksi bersarang di Java.

2. Contoh Koleksi Bersarang

Misalkan kita memiliki daftar daftar tipe String .

List
    
      nestedList = asList( asList("one:one"), asList("two:one", "two:two", "two:three"), asList("three:one", "three:two", "three:three", "three:four"));
    

3. Meratakan Daftar Dengan forEach

Untuk meratakan koleksi bertingkat ini menjadi daftar string, kita bisa menggunakan forEach bersama dengan referensi metode Java 8:

public  List flattenListOfListsImperatively( List
    
      nestedList) { List ls = new ArrayList(); nestedList.forEach(ls::addAll); return ls; } 
    

Dan di sini Anda dapat melihat metode beraksi:

@Test public void givenNestedList_thenFlattenImperatively() { List ls = flattenListOfListsImperatively(nestedList); assertNotNull(ls); assertTrue(ls.size() == 8); assertThat(ls, IsIterableContainingInOrder.contains( "one:one", "two:one", "two:two", "two:three", "three:one", "three:two", "three:three", "three:four")); }

4. Meratakan Daftar Dengan FlatMap

Kita juga bisa meratakan daftar bersarang dengan memanfaatkan metode flatMap dari Stream API.

Hal ini memungkinkan kami untuk meratakan struktur Aliran bersarang dan akhirnya mengumpulkan semua elemen ke koleksi tertentu:

public  List flattenListOfListsStream(List
    
      list) { return list.stream() .flatMap(Collection::stream) .collect(Collectors.toList()); } 
    

Dan inilah logika beraksi:

@Test public void givenNestedList_thenFlattenFunctionally() { List ls = flattenListOfListsStream(nestedList); assertNotNull(ls); assertTrue(ls.size() == 8); }

5. Kesimpulan

Metode forEach atau flatMap sederhana di Java 8, yang dikombinasikan dengan referensi metode, dapat digunakan untuk meratakan koleksi bertingkat.

Anda dapat menemukan kode yang dibahas dalam artikel ini di GitHub.