Presijecanje dvaju popisa na Javi

1. Pregled

U ovom uputstvu naučit ćemo kako doći do presjeka dva Popiss.

Kao i mnoge druge stvari, ovo je postalo puno lakše zahvaljujući uvođenju streamova u Javi 8.

2. Sjecište dviju lista žica

Stvorimo dvije Popiss od Nizs nekim presjekom - oba imaju neke duplicirane elemente:

Lista popisa = Arrays.asList ("crvena", "plava", "plava", "zelena", "crvena"); Popis otherList = Arrays.asList ("crvena", "zelena", "zelena", "žuta");

A sada utvrdit ćemo presjek popisa uz pomoć stream metoda:

Postavi rezultat = list.stream () .distinct () .filter (otherList :: contains) .collect (Collectors.toSet ()); Postavite commonElements = novi HashSet (Arrays.asList ("crvena", "zelena")); Assert.assertEquals (commonElements, rezultat);

Prvo uklanjamo duplicirane elemente s različit. Zatim koristimo filtar za odabir elemenata koji su također sadržani u otherList.

Na kraju pretvaramo svoj izlaz s a Kolektor. Sjecište bi trebalo sadržavati svaki zajednički element samo jednom. Stoga redoslijed ne bi trebao biti važan postaviti je najjednostavniji izbor, ali također možemo koristiti izlistati ili druga metoda sakupljača.

Za više pojedinosti pregledajte naš vodič za kolekcionare Java 8.

3. Presijecanje popisa prilagođenih klasa

Što ako naš Popiss ne sadrže Nizs, nego primjeri prilagođene klase koju smo stvorili? Pa, sve dok slijedimo Javine konvencije, rješenje s stream metodama dobro će raditi za našu prilagođenu klasu.

Kako to sadrži metoda odlučuje hoće li se određeni objekt pojaviti na popisu? Bazirano na jednako metoda. Dakle, moramo nadjačati jednako metodu i pobrinite se da uspoređuje dva objekta na temelju vrijednosti relevantnih svojstava.

Na primjer, dva su pravokutnika jednaka ako su im širine i visine jednake.

Ako ne nadjačamo jednako metoda, naša klasa koristi jednako implementacija roditeljske klase. Na kraju dana, tačnije, nasljedni lanac, Objekt razred ' jednako metoda se izvršava. Tada su dvije instance jednake samo ako se odnose na potpuno isti objekt na hrpi.

Za više informacija o jednako metodu, pogledajte naš članak o Javi jednako () i hashCode () Ugovori.

4. Zaključak

U ovom kratkom članku vidjeli smo kako koristiti streamove za izračunavanje presjeka dvaju popisa. Postoje mnoge druge operacije koje su nekad bile prilično zamorne, ali su prilično jednostavne ako se dobro snađemo u Java Stream API-ju. Ovdje pogledajte naše daljnje vodiče s Java streamovima.

Primjeri koda dostupni su na GitHubu.