A FilenameFilter gyors használata
1. Bemutatkozás
A Java az informatív kommentár hozzáadása előtt már rendelkezik funkcionális interfészekkel, @FunctionalInterface. FilenameFilter az egyik ilyen felület.
Röviden áttekintjük a használatát, és megértjük, hol illeszkedik ma a Java világába.
2. FilenameFilter
Mivel ez egy funkcionális felület - pontosan egy elvont módszerrel kell rendelkeznünk, és FilenameFilter ezt a meghatározást követi:
logikai elfogadás (File dir, String name);
3. Használat
Használunk FilenameFilter szinte kizárólag az összes fájl - amely megfelel a megadott szűrőnek - felsorolására egy könyvtárban.
Túlterhelt lista(..) és listFiles (..) módszerek java.io.Fájl vegyen példát FilenameFilter és adjon vissza egy sor az összes fájlnak, amely megfelel a szűrőnek
A következő teszteset az összes json fájlok egy könyvtárban:
@Test public void whenFilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, név) -> name.endsWith (". Json"); Karakterlánc [] várható fájlok = {"emberek.json", "hallgatók.json"}; Fájlkönyvtár = új fájl (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); Karakterlánc [] actualFiles = könyvtár.lista (szűrő); Assert.assertArrayEquals (várhatóFájlok, ténylegesFájlok); }
3.1. FileFilter mint BiPredicate
Az Oracle több mint 40 funkcionális interfészt adott hozzá a Java 8-hoz, és a régi felülettel ellentétben ezek általánosak. Ez azt jelentette, hogy bármilyen referencia típushoz felhasználhatjuk őket.
BiPredicate volt egy ilyen felület. Egyetlen absztrakt módszerének ez a meghatározása:
logikai teszt (T t, U u);
Ez azt jelenti, hogy FilenameFilter csak egy speciális esete BiPredicate hol T van File és U van Húr.
4. Következtetés
Annak ellenére, hogy most már van általános Állítmány és BiPredicate funkcionális interfészek, továbbra is látni fogjuk a FilenameFilter egyszerűen azért, mert a meglévő Java könyvtárakban használták.
Emellett egyetlen célját is jól szolgálja, így nincs ok arra, hogy adott esetben ne használja.
Mint mindig, az összes példa elérhető a GitHubon.