Eclipse Collections - Χαρακτηριστικά που θέλετε, με τα collections που χρειάζεστε.

# Eclipse Collections

### - Δυνατότητες που θέλετε με τα collections που χρειάζεστε -

## Ξεκινώντας με το
Eclipse Collections

Το Eclipse Collections είναι το καλύτερο Java framework για collections που δημιουργήθηκε ποτέ που σας δίνει ευχαρίστηση κατά την ανάπτυξη εφαρμογών Java.
Ενσωματώστε το σήμερα στον κώδικά σας με τα αγαπημένα σας build εργαλεία!

    <dependency>
      <groupId>org.eclipse.collections</groupId>
      <artifactId>eclipse-collections-api</artifactId>
      <version>11.0.0</version>
    </dependency>

    <dependency>
      <groupId>org.eclipse.collections</groupId>
      <artifactId>eclipse-collections</artifactId>
      <version>11.0.0</version>
    </dependency>

    implementation 'org.eclipse.collections:eclipse-collections-api:11.0.0'
    implementation 'org.eclipse.collections:eclipse-collections:11.0.0'

    <dependency org="org.eclipse.collections" name="eclipse-collections-api" rev="11.0.0" />
    <dependency org="org.eclipse.collections" name="eclipse-collections" rev="11.0.0" />

    eclipse-collections-api-11.0.0.jar
    eclipse-collections-11.0.0.jar

## Εκλεπτυσμένα, Περιεκτικά και Eυανάγνωστα APIs

Μεγιστοποιήστε τη δύναμη των 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 συμπεριλαμβανομένων μεταξύ άλλων των
immutable collections, primitive collections, bimaps, multimaps και bags

Μπορείτε να χρησιμοποιήσετε διάφορα είδη 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]

## Μειώστε το αποτύπωμα μνήμης
κάνοντας χρήση αποδοτικών ως προς την μνήμη containers

Το Eclipse Collections παρέχει μια υλοποίηση που είναι αποδοτική ως προς τη χρήση της μνήμης, των Sets και των Maps, όπως επίσης και των primitive collections.

## Μάθετε το Eclipse Collections με τη χρήση Kata

Ρίξτε μια ματιά στο 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);
    }

## Η Ιστορία του Eclipse Collections

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.

### Contribute

Δεχόμαστε contributions!
Το roadmap του έργου Eclipse Collections είναι διαθέσιμο εδώ.
Δεχόμαστε contributions μέσω pull requests στο GitHub. Παρακαλούμε διαβάστε το Πώς να συνεισφέρετε για να ξεκινήσετε.

### Πρόσφατα νέα

Eclipse Collections 11.0.0 ανακοινώθηκε (Nov 23 2021)

Eclipse Collections 10.4.0 ανακοινώθηκε (Aug 20 2020)

Eclipse Collections 10.3.0 ανακοινώθηκε (Aug 8 2020)

Eclipse Collections 10.2.0 ανακοινώθηκε (Feb 11 2020)

Eclipse Collections 10.1.0 ανακοινώθηκε (Dec 4 2019)

Eclipse Collections 10.0.0 ανακοινώθηκε (Jul 10 2019)

### Σύνδεσμοι Κοινότητας

Eclipse PMI: eclipse project management infrastructure

GitHub: eclipse-collections

Issues: GitHub issues

Mailing lists: collections-dev mailing list

Wiki: GitHub wiki

Forum: Eclipse Collections Forum

StackOverflow: το eclipse-collections tag

### - Περισσότερες δυνατότητες, λιγότερη σπατάλη -