Két lista metszéspontja a Java-ban
1. Áttekintés
Ebben az oktatóanyagban megtudhatjuk, hogyan lehet lekérni kettő metszéspontját Listas.
Sok más dologhoz hasonlóan ez sokkal könnyebbé vált a streamek Java 8-ban történő bevezetésének köszönhetően.
2. Két húrlista metszéspontja
Hozzunk létre kettőt Listas Húrs néhány kereszteződéssel - mindkettőnek van néhány duplikált eleme:
List list = Arrays.asList ("piros", "kék", "kék", "zöld", "piros"); List otherList = Arrays.asList ("piros", "zöld", "zöld", "sárga");
És most a stream metódusok segítségével határozzuk meg a listák metszéspontját:
Set result = list.stream () .distinct () .filter (otherList :: tartalmaz) .collect (Collectors.toSet ()); Set commonElements = new HashSet (Arrays.asList ("piros", "zöld")); Assert.assertEquals (közösElementek, eredmény);
Először eltávolítjuk a duplikált elemeket a különböző. Ezután használjuk a szűrő hogy kiválasszuk azokat az elemeket is, amelyek a otherList.
Végül konvertáljuk a kimenetünket a-val Gyűjtő. A kereszteződés minden közös elemet csak egyszer tartalmazhat. A sorrend tehát nem számít beállít a legegyszerűbb választás, de használhatjuk is toList vagy más gyűjtői módszer.
További részletekért olvassa el a Java 8 gyűjtőinek útmutatót.
3. Az egyéni osztályok listáinak metszéspontja
Mi lenne, ha a miénk Listas nem tartalmazzák Húrs inkább egy általunk létrehozott egyéni osztály példányai? Nos, mindaddig, amíg betartjuk a Java konvencióit, a stream módszerekkel végzett megoldás remekül működik az egyéni osztályunk számára.
Hogyan működik a tartalmazza módszerrel eldöntheti, hogy egy adott objektum megjelenik-e a listán? Alapján egyenlő módszer. Így felül kell írnunk a egyenlő metódus és győződjön meg arról, hogy két objektumot hasonlít össze a releváns tulajdonságok értéke alapján.
Például két téglalap egyenlő, ha szélességük és magasságuk megegyezik.
Ha nem írjuk felül a egyenlő módszerrel osztályunk a egyenlő a szülő osztály megvalósítása. A nap végén, vagy inkább az öröklési lánc, a Tárgy osztály' egyenlő módszer végrehajtásra kerül. Ekkor két eset csak akkor egyenlő, ha pontosan ugyanarra az objektumra utalnak a kupacban.
További információ a egyenlő módszer, lásd a Java-ról szóló cikkünket egyenlő () és hash kód() Szerződések.
4. Következtetés
Ebben a rövid cikkben azt láthattuk, hogyan használhatjuk az adatfolyamokat két lista metszéspontjának kiszámításához. Sok olyan művelet létezik, amelyek korábban meglehetősen unalmasak voltak, de meglehetősen egyszerűek, ha ismerjük a Java Stream API-t. Vessen egy pillantást a Java adatfolyamokkal kapcsolatos további oktatóprogramjainkra itt.
Kódpéldák elérhetők a GitHub oldalon.