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.