Verzamelingen in Java inpakken

1. Inleiding

In deze zelfstudie laten we zien hoe u twee verzamelingen in één logische verzameling kunt zippen.

De "zip ' werking wijkt enigszins af van de standaard "concat" of "merge". Terwijl de 'concat'- of' merge'-bewerkingen gewoon de nieuwe verzameling toevoegen aan het einde van de bestaande verzameling, 'zip ' operatie neemt een element uit elke collectie en combineert ze.

De kernbibliotheek ondersteunt 'zip ' impliciet, maar er zijn zeker bibliotheken van derden die deze nuttige bewerking wel hebben.

Beschouw twee lijsten, één met namen van mensen, andere met hun leeftijden.

Lijstnamen = nieuwe ArrayList (Arrays.asList ("John", "Jane", "Jack", "Dennis")); Lijst leeftijden = nieuwe ArrayList (Arrays.asList (24, 25, 27));

Na het zippen, eindigen we met naam-leeftijd-paren die zijn opgebouwd uit overeenkomstige elementen uit die twee collecties.

2. Java 8 gebruiken IntStream

Met behulp van core Java kunnen we indexen genereren met IntStream en gebruik ze vervolgens om overeenkomstige elementen uit twee collecties te extraheren:

IntStream .range (0, Math.min (names.size (), leeftijden.size ())) .mapToObj (i -> names.get (i) + ":" + leeftijden.get (i)) //. ..

3. Guavastromen gebruiken

Vanaf versie 21 biedt Google Guava een zip-helper-methode in de Streams klasse. Dit verwijdert al het gedoe van het maken en toewijzen van indexen en vermindert de syntaxis voor invoer en bewerkingen:

Streams .zip (names.stream (), leeftijden.stream (), (naam, leeftijd) -> naam + ":" + leeftijd) // ...

4. Met behulp van jOOλ(JOOL)

jOOL biedt ook enkele van de fascinerende toevoegingen aan Java 8 Lambda, en met de ondersteuning van Tuple1 naar Tuple16, de zip-operatie wordt veel interessanter:

Seq .of ("John", "Jane", "Dennis") .zip (Seq.of (24,25,27));

Dit levert een resultaat op van een Seq met Tuples van elementen met ritssluiting:

(tuple (1, "a"), tuple (2, "b"), tuple (3, "c"))

jOOL's ritssluiting methode biedt de flexibiliteit om een ​​aangepaste transformatiefunctie te bieden:

Seq .of (1, 2, 3) .zip (Seq.of ("a", "b", "c"), (x, y) -> x + ":" + y);

of als iemand alleen met index wil zippen, kan hij gaan met de zipWithIndex methode geleverd door JOOL:

Seq.of ("a", "b", "c"). ZipWithIndex ();

5. Conclusie

In deze korte tutorial hebben we bekeken hoe we het zip operatie.

Zoals altijd zijn de codevoorbeelden in het artikel te vinden op GitHub.