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.