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.