Meratakan Koleksi Bersarang di Jawa

1. Gambaran keseluruhan

Dalam artikel ringkas ini, kita akan meneroka cara meratakan koleksi bersarang di Java.

2. Contoh Koleksi Bersarang

Katakan kita mempunyai senarai senarai jenis 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 Senarai Dengan forEach

Untuk meratakan koleksi bersarang ini ke dalam senarai rentetan, kita dapat menggunakan forEach bersama dengan rujukan kaedah Java 8:

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

Dan di sini anda dapat melihat kaedah dalam tindakan:

@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 Senarai Dengan flatMap

Kami juga dapat meratakan daftar bersarang dengan menggunakan kaedah flatMap dari Stream API.

Ini membolehkan kita meratakan struktur Stream 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 logik dalam tindakan:

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

5. Kesimpulan

Kaedah forEach atau flatMap yang sederhana di Java 8, dalam kombinasi dengan rujukan kaedah, dapat digunakan untuk meratakan koleksi bersarang.

Anda boleh mendapatkan kod yang dibincangkan dalam artikel ini di GitHub.