Snel gebruik van FilenameFilter

1. Inleiding

Java heeft functionele interfaces gehad voordat de informatieve annotatie werd toegevoegd, @FunctioneleInterface. BestandsnaamFilter is zo'n interface.

We zullen het gebruik ervan kort bekijken en begrijpen waar het tegenwoordig in de wereld van Java past.

2. BestandsnaamFilter

Sinds dit is een functionele interface - we hebben precies één abstracte methode nodig, en BestandsnaamFilter volgt deze definitie:

boolean accept (Bestandsmap, Stringnaam);

3. Gebruik

We gebruiken BestandsnaamFilter bijna uitsluitend om alle bestanden - die voldoen aan het gespecificeerde filter - in een map weer te geven.

De overbelast lijst(..) en listFiles (..) methoden in java.io.File neem een ​​voorbeeld van BestandsnaamFilter en retourneer een array van alle bestanden die aan het filter voldoen.

De volgende testcase filtert alle json bestanden in een map:

@Test openbare leegte whenFilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, naam) -> name.endsWith (". Json"); String [] verwachteFiles = {"people.json", "students.json"}; Bestandsmap = nieuw bestand (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); String [] actualFiles = directory.list (filter); Assert.assertArrayEquals (verwachtFiles, actualFiles); }

3.1. FileFilter net zo BiPredicate

Oracle heeft meer dan 40 functionele interfaces toegevoegd in Java 8, en in tegenstelling tot oudere interfaces zijn deze generiek. Dat betekende dat we ze voor elk referentietype konden gebruiken.

BiPredicate was zo'n interface. De 'enkele abstracte methode heeft deze definitie:

booleaanse test (T t, U u);

Dit betekent dat BestandsnaamFilter is slechts een speciaal geval van BiPredicate waar T is het dossier en U is Draad.

4. Conclusie

Ook al hebben we nu generiek Predikaat en BiPredicate functionele interfaces, zullen we blijven zien dat BestandsnaamFilter simpelweg omdat het in gebruik is geweest in bestaande Java-bibliotheken.

Het dient ook zijn enige doel goed, dus er is geen reden om het niet te gebruiken wanneer dit van toepassing is.

Zoals altijd zijn alle voorbeelden beschikbaar op GitHub.