Fladning af indlejrede samlinger i Java

1. Oversigt

I denne hurtige artikel undersøger vi, hvordan man flader en indlejret samling i Java.

2. Eksempel på en indlejret samling

Antag, at vi har en liste over typelister Snor.

Liste nestedList = asList (asList ("one: one"), asList ("two: one", "two: two", "two: three"), asList ("three: one", "three: two", "three : tre "," tre: fire "));

3. Fladning af Liste Med for hver

For at flade denne indlejrede samling i en liste over strenge, kan vi bruge for hver sammen med en Java 8-metodehenvisning:

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

Og her kan du se metoden i aktion:

@Test offentlig ugyldighed givenNestedList_thenFlattenImperatively () {List ls = flattenListOfListsImperatively (nestedList); assertNotNull (ls); assertTrue (ls.size () == 8); assertThat (ls, IsIterableContainingInOrder.contains ("en: en", "to: en", "to: to", "to: tre", "tre: en", "tre: to", "tre: tre", "tre: fire")); }

4. Fladning af Liste Med flatMap

Vi kan også flade den indlejrede liste ved at bruge flatMap metode fra Strøm API.

Dette giver os mulighed for at flade det indlejrede Strøm strukturere og til sidst samle alle elementer til en bestemt samling:

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

Og her er logikken i aktion:

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

5. Konklusion

En simpel forEach eller flatMap metoder i Java 8, i kombination med metodereferencer, kan bruges til udfladning af indlejrede samlinger.

Du kan finde koden, der er diskuteret i denne artikel, på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found