Το Eclipse Collections είναι το καλύτερο Java framework για collections που
δημιουργήθηκε ποτέ που σας δίνει ευχαρίστηση κατά την ανάπτυξη εφαρμογών Java.
Ενσωματώστε το σήμερα στον κώδικά σας με τα αγαπημένα σας build εργαλεία!
<dependency> <groupId>org.eclipse.collections</groupId> <artifactId>eclipse-collections-api</artifactId> <version>11.1.0</version> </dependency> <dependency> <groupId>org.eclipse.collections</groupId> <artifactId>eclipse-collections</artifactId> <version>11.1.0</version> </dependency>
implementation 'org.eclipse.collections:eclipse-collections-api:11.1.0' implementation 'org.eclipse.collections:eclipse-collections:11.1.0'
<dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="11.1.0" /> <dependency org="org.eclipse.collections" name="eclipse-collections" rev="11.1.0" />
Μεγιστοποιήστε τη δύναμη των Lambda expressions και των method references στη Java 8 μέσω εκλεπτυσμένων APIs, άμεσα διαθέσιμων στα δικά σας collections.
boolean anyPeopleHaveCats = this.people .anySatisfyWith(Person::hasPet, PetType.CAT); int countPeopleWithCats = this.people .countWith(Person::hasPet, PetType.CAT); MutableList<Person> peopleWithCats = this.people .selectWith(Person::hasPet, PetType.CAT)
boolean anyPeopleHaveCats = this.people .anySatisfy(person -> person.hasPet(PetType.CAT)); int countPeopleWithCats = this.people .count(person -> person.hasPet(PetType.CAT)); MutableList<Person> peopleWithCats = this.people .select(person -> person.hasPet(PetType.CAT));
boolean anyPeopleHaveCats = this.people .stream() .anyMatch(person -> person.hasPet(PetType.CAT)); long countPeopleWithCats = this.people .stream() .filter(person -> person.hasPet(PetType.CAT)) .count(); List<Person> peopleWithCats = this.people .stream() .filter(person -> person.hasPet(PetType.CAT)) .collect(Collectors.toList());
Μπορείτε να χρησιμοποιήσετε διάφορα είδη container, αξιοποιώντας εύχρηστα factory methods για δημιουργία αντικειμένων.
//Αρχικοποιώντας μια mutable λίστα με χρήση των μεθόδων empty(), of(), with() MutableList<String> mutableListEmpty = Lists.mutable.empty(); MutableList<String> mutableListOf = Lists.mutable.of("One", "One", "Two", "Three"); MutableList<String> mutableListWith = Lists.mutable.with("One", "One", "Two", "Three"); //Υπάρχουν διάφορα είδη container τα οποία είναι διαθέσιμα MutableSet<String> mutableSet = Sets.mutable.with("One", "One", "Two", "Three"); MutableBag<String> mutableBag = Bags.mutable.with("One", "One", "Two", "Three"); MutableStack<String> mutableStack = Stacks.mutable.with("One", "One", "Two", "Three"); MutableMap<String, String> mutableMap = Maps.mutable.with("key1", "value1", "key2", "value2", "key3", "value3"); MutableMultimap<String, String> multimapWithList = Multimaps.mutable.list.with("key1", "value1-1", "key1", "value1-2", "key2","value2-1"); MutableBiMap<String, String> mutableBiMap = BiMaps.mutable.with("key1", "value1", "key2", "value2", "key3", "value3");
//Αρχικοποιώντας μια immutable λίστα με χρήση των μεθόδων empty(), of(), with() ImmutableList<String> immutableListEmpty = Lists.immutable.empty(); ImmutableList<String> immutableListOf = Lists.immutable.of("One", "One", "Two", "Three"); ImmutableList<String> immutableListWith = Lists.immutable.with("One", "One", "Two", "Three"); //Υπάρχουν διάφορα είδη container τα οποία είναι διαθέσιμα ImmutableSet<String> immutableSet = Sets.immutable.with("One", "One", "Two", "Three"); ImmutableBag<String> immutableBag = Bags.immutable.with("One", "One", "Two", "Three"); ImmutableStack<String> immutableStack = Stacks.immutable.with("One", "One", "Two", "Three"); ImmutableMap<String, String> immutableMap = Maps.immutable.with("key1", "value1", "key2", "value2", "key3", "value3"); ImmutableMultimap<String, String> immutableMultimapWithList = Multimaps.immutable.list.with("key1", "value1-1", "key1", "value1-2", "key2","value2-1"); ImmutableBiMap<String, String> immutableBiMap = BiMaps.immutable.with("key1", "value1", "key2", "value2", "key3", "value3");
//Mutable και immutable Lists, Sets, Bags, Stacks και Maps είναι διαθέσιμα για όλα τα 8 primitive types MutableIntList intList = IntLists.mutable.of(1, 2, 3); MutableLongList longList = LongLists.mutable.of(1L, 2L, 3L); MutableCharList charList = CharLists.mutable.of('a', 'b', 'c'); MutableShortList shortList = ShortLists.mutable.of((short)1, (short)2, (short)3); MutableByteList byteList = ByteLists.mutable.of((byte)1, (byte)2, (byte)3); MutableBooleanList booleanList = BooleanLists.mutable.of(true, false); MutableFloatList floatList = FloatLists.mutable.of(1.0f, 2.0f, 3.0f); MutableDoubleList doubleList = DoubleLists.mutable.of(1.0, 2.0, 3.0); //Μπορείτε να δημιουργήσετε ένα κυμαινόμενο εύρος ακεραίων κάνοντας χρήση του IntInterval IntInterval oneTo10 = IntInterval.fromTo(1, 10); // ακέραιοι από το 1 μέχρι το 10 // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] IntInterval oneTo10By3 = IntInterval.fromToBy(1, 10, 3); // ακέραιοι από το 1 μέχρι το 10 με βήμα 3 // [1, 4, 7, 10] IntInterval oddsFrom1To10 = IntInterval.oddsFromTo(1, 10); // περιττοί ακέραιοι από το 1 μέχρι το 10 // [1, 3, 5, 7, 9] IntInterval evensFrom1To10 = IntInterval.evensFromTo(1, 10); // άρτιοι ακέραιοι από το 1 μέχρι το 10 // [2, 4, 6, 8, 10]
Το Eclipse Collections παρέχει μια υλοποίηση που είναι αποδοτική ως προς τη χρήση της μνήμης, των Sets και των Maps, όπως επίσης και των primitive collections.
Ρίξτε μια ματιά στο Eclipse Collections Kata, ένα διασκεδαστικό τρόπο που σας βοηθάει να μάθετε την ιδιωματική χρήση του Eclipse Collections. Αυτό το συγκεκριμένο kata έχει ρυθμιστεί σαν μια σειρά από unit tests τα οποία αποτυγχάνουν. Σκοπός σας είναι να τα κάνετε να επιτύχουν, χρησιμοποιώντας το Eclipse Collections.
@Test public void getFirstNamesOfAllPeople() { MutableList<Person> people = this.people; MutableList<String> firstNames = null; //Αντικαταστήστε το null με μια transformation μέθοδο στο MutableList. MutableList<String> expectedFirstNames = Lists.mutable.with("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John"); Assert.assertEquals(expectedFirstNames, firstNames); }
@Test public void getFirstNamesOfAllPeople() { MutableList<Person> people = this.people; MutableList<String> firstNames = people.collect(Person::getFirstName); MutableList<String> expectedFirstNames = Lists.mutable.with("Mary", "Bob", "Ted", "Jake", "Barry", "Terry", "Harry", "John"); Assert.assertEquals(expectedFirstNames, firstNames); }
Tο Eclipse Collections ξεκίνησε στη Goldman Sachs το 2004, ως ένα framework για collections ονόματι Caramel.
Έκτοτε, το framework εξελίχθηκε και το 2012, πήρε τη μορφή ανοιχτού λογισμικού στο GitHub ως ένα έργο που
ονομάστηκε
GS Collections.
Το έργο GS Collections παρουσιάστηκε σε ένα μεγάλο αριθμό
συνεδρίων
συμπεριλαμβανομένου του JVM Summit το 2012 και του JavaOne το 2014.
Μια σύγκριση μεταξύ των παράλληλων lazy implementations της Java 8, της Scala και του GS Collections
παρουσιάστηκε στο
QCon New York
το 2014.
Επίσης, articles σχετικά με το
GS Collections
(Μέρος1 /
Μέρος2)
δημοσιεύτηκαν στο InfoQ.com, τα οποία δείχνουν κάποιες από τις ικανότητες του collections framework μέσα
από παραδείγματα, όπως επίσης και συνεντεύξεις με το δημιουργό του GS Collections.
Με την πάροδο των χρόνων, περίπου 40 προγραμματιστές από την ίδια εταρία έχουν συνεισφέρει
στο collections framework.
Έχοντας ως σκοπό τη μεγιστοποίηση της καλύτερης φύσης έργων ανοιχτού κώδικα, το έργο GS Collections μεταφέρθηκε στο Eclipse Foundation, αλλάζοντας όνομα σε Eclipse Collections το 2015.
Αυτή τη στιγμή το framework είναι πλήρως ανοιχτό για την κοινότητα και δέχεται contributions!
Ένας πλήρης οδηγός αναφοράς της βιβλιοθήκης είναι διαθέσιμος στο GitHub: Οδηγός Αναφοράς.
Ο πηγαίος κώδικας είναι διαθέσιμος στο GitHub: Eclipse Collections.