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.