Insbesondere suche ich nach einer ähnlich sauberen Schreibweise für Collection<T>.TrueForAll
/ Exists
, etc.
Es fühlt sich übel an, eine foreach-Schleife schreiben zu müssen, um die Rückgabe einer Methode für jedes Objekt zu überprüfen, also hoffe ich, dass es eine bessere Java-Sprache dafür gibt.
Prädikate werden bereitgestellt in der Sammlung Google Sammlungen .
Functional Java bietet erstklassige Funktionen. Ein Prädikat wird als F<T, Boolean>
ausgedrückt. Zum Beispiel ist hier ein Programm, das ein Array auf die Existenz einer Zeichenfolge, die alle Kleinbuchstaben ist, testet.
Soweit ich weiß, nein. Aber Apache Commons-Sammlungen hat so etwas: Predicate
Bearbeiten : Richtig, wie in den Kommentaren erwähnt, stammt Commons Collections aus der Welt der Prä-Generika, also Google Sammlungen ( update : Guava ) scheint jetzt eine deutlich bessere Option zu sein. Dennoch, Commons Collections verdienen es, erwähnt zu werden, da es eine bekannte Bibliothek ist, die das tut, und auch, damit die Leute warum wissen, sie nicht zu benutzen. :)
Ich habe gerade mehr über Google Collections in diesem netten Interview mit seinen Hauptentwicklern gelesen und wollte es tun zitieren Sie ein Bit, das sich speziell mit dem Problem "Sammlungen von Google Collections und Apache Commons Collections" beschäftigt:
Was ist einzigartig an Ihrem Ansatz? Wie unterscheidet es sich zum Beispiel die Apache Commons Sammlung?
Kevin: "Nun, Gott sei Dank für den Apachen Gemeingüter. Wir wären alle in schlechter Verfassung ohne Bibliotheken wie diese. Das sagte leider dieses spezielle Projekt ist in einer Vor-Generika-Welt ins Stocken geraten. Sie wollen Generika übernehmen, aber sie erkennen an, dass dies beinhalten würde eine ziemlich nichttriviale und inkompatible umschreiben. Bis jetzt scheint niemand zu sein aktiv eine solche Anstrengung zu fahren. Beim Google haben wir Java 5 verwendet unternehmensweit seit dem Frühjahr 2005. Eine Sammlungsbibliothek ist ungeneriert war ein Deal-Breaker für uns, weil wir es wirklich hassen Compilerwarnungen. Ich war auch besorgt über die vielen Orte in was die Apache-Sammlungen nicht tun entsprechen den Spezifikationen der JDK-Schnittstellen, die sie implementieren. "
[...]
Jared: "Wie Kevin meint, unsere Bibliothek ist die einzige Bibliothek, die ich kenne außerhalb des JDK, mit Java 5 erstellt Eigenschaften: Generika, Enums, Kovariante Rückgabetypen usw. Beim Schreiben von Java 5 Code, möchten Sie eine Sammlung Bibliothek das nutzt die Vorteile der Sprache. Darüber hinaus setzen wir enorm ein Anstrengung in die Bibliothek zu machen vollständig, robust und konsistent mit die JDK-Auflistungsklassen. Unser Sammlungsklassen waren viel mehr Anfangs begrenzt, aber wir haben nach und nach verbesserte sie in den letzten zwei Jahren. Da die gesamte Bibliothek in Google verwendet wird Source-Control-System, wir hatten die Flexibilität, um die Öffentlichkeit zu verändern Schnittstellen. Ein Open-Source-Projekt wie Apache Commons Collection nicht habe die Freiheit, es zu ändern Verhalten nach der ersten Veröffentlichung. Da werden wir diese Flexibilität einmal verlieren Google Sammlungen Bibliothek 1.0 ist veröffentlicht, sind wir begierig zu erhalten Feedback jetzt, damit wir Dinge bekommen können richtig. "
Tags und Links java .net collections predicate