Geneste verzamelingen in Java afvlakken

1. Overzicht

In dit korte artikel zullen we onderzoeken hoe u een geneste verzameling in Java kunt afvlakken.

2. Voorbeeld van een geneste verzameling

Stel dat we een lijst met typenlijsten hebben Draad.

Lijst nestedList = asList (asList ("one: one"), asList ("two: one", "two: two", "two: three"), asList ("three: one", "three: two", "three : drie "," drie: vier "));

3. Afvlakken van de Lijst Met voor elk

Om deze geneste verzameling af te vlakken tot een lijst met strings, kunnen we voor elk samen met een Java 8-methodereferentie:

openbare lijst flattenListOfListsImperively (List nestedList) {List ls = nieuwe ArrayList (); nestedList.forEach (ls :: addAll); terug ls; } 

En hier kun je de methode in actie zien:

@Test openbare leegte gegevenNestedList_thenFlattenImperative () {List ls = flattenListOfListsImperively (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", "drie vier")); }

4. Afvlakken van de Lijst Met flatMap

We kunnen de geneste lijst ook afvlakken door de flatMap methode van de Stroom API.

Dit stelt ons in staat om de geneste Stroom structureer en verzamel uiteindelijk alle elementen voor een bepaalde verzameling:

openbare lijst flattenListOfListsStream (List list) {return list.stream () .flatMap (Collectie :: stream) .collect (Collectors.toList ()); } 

En hier is de logica in actie:

@Test openbare leegte gegevenNestedList_thenFlattenFunctionally () {List ls = flattenListOfListsStream (nestedList); assertNotNull (ls); assertTrue (ls.size () == 8); }

5. Conclusie

Een eenvoudige forEach of flatMap methoden in Java 8, in combinatie met methode-referenties, kunnen worden gebruikt voor het afvlakken van geneste collecties.

Je kunt de code vinden die in dit artikel wordt besproken op GitHub.