Hurtig brug af filnavnFilter

1. Introduktion

Java har haft funktionelle grænseflader inden tilføjelsen af ​​den informative kommentar, @FunktionelInterface. FilnavnFilter er en sådan grænseflade.

Vi tager et kort kig på brugen og forstå, hvor det passer i Java-verdenen i dag.

2. FilnavnFilter

Siden dette er en funktionel grænseflade - vi skal have nøjagtigt en abstrakt metodeog FilnavnFilter følger denne definition:

boolsk accept (File dir, String name);

3. Anvendelse

Vi bruger FilnavnFilter næsten udelukkende for at liste alle filer - der opfylder det angivne filter - i en mappe.

Den overbelastede liste(..) og listFiles (..) metoder i java.io-fil tage en instans af FilnavnFilter og returner en array af alle filer, der tilfredsstiller filteret.

Følgende testcase filtrerer alle json filer i et bibliotek:

@Test offentlig ugyldig nårFilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, name) -> name.endsWith (". Json"); String [] expectFiles = {"people.json", "students.json"}; Filkatalog = ny fil (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); Streng [] actualFiles = katalog.liste (filter); Assert.assertArrayEquals (expectFiles, actualFiles); }

3.1. FileFilter som BiPredicate

Oracle tilføjede mere end 40 funktionelle grænseflader i Java 8, og i modsætning til ældre grænseflader er disse generiske. Det betød, at vi kunne bruge dem til enhver referencetype.

BiPredicate var en sådan grænseflade. Dens 'enkelt abstrakte metode har denne definition:

boolsk test (Tt, U u);

Hvad dette betyder er, at FilnavnFilter er bare et specielt tilfælde af BiPredicate hvor T er Fil og U er Snor.

4. Konklusion

Selvom vi nu har generiske Prædikat og BiPredicate funktionelle grænseflader, vil vi fortsat se forekomster af FilnavnFilter simpelthen fordi det har været i brug i eksisterende Java-biblioteker.

Det tjener også sit eneste formål godt, så der er ingen grund til ikke at bruge det, når det er relevant.

Som altid er alle eksemplerne tilgængelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found