Eclipse Collections - Funksjoner du ønsker med samlingene du trenger.

# Eclipse Collections

### - Funksjoner du ønsker med samlingene du trenger -

## Kom i gang med
Eclipse Collections

Eclipse Collections er det beste rammeverket for Java-samlinger noensinne – det passer perfekt når du skal utvikle Java-koden din.
Integrer den i kodebasen din i dag med dine favorittbyggverktøy!

    <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

## Omfangsrike, konsise og lesbare API-er

Maksimer kraften til lambda-uttrykk og metodereferanser i Java 8 med omfangsrike API-er som er direkte tilgjengelige i samlingene dine.

    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());

## Mange containertyper, inkludert
uforanderlige samlinger, primitive samlinger, Bimap, Multimap og Bag

Uforanderlige (immutable) samlinger, samlinger av primitive typer, Bimap (omvendt ordbok hvor du kan finne en nøkkel etter verdi), Multimap (multi-ordbøker – ordbøker med ikke-unike nøkler) og Bag (flersett – et sett med gjentagende elementer) – du kan bruke alle disse typene containere ved bruk av praktiske og lett tilgjengelige factory-metoder.

    //Instansierer muterbar liste with empty()-, of()-, with()-metoder
    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");

    //Forskjellige container-typer som er tilgjengelige
    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");

    //Instansierer muterbar liste with empty()-, of()-, with()-metoder
    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");

    //Forskjellige container-typer som er tilgjengelige
    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");

    //Muterbare og uforanderlige lister, sett, Bags, Stacks og Maps er tilgjengelige for alle 8 primitive typer
    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);

    //Du kan lage heltallslister med intervaller vha. IntInterval
    IntInterval oneTo10 =
      IntInterval.fromTo(1, 10); // heltall fra 1 til 10
    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    IntInterval oneTo10By3 =
      IntInterval.fromToBy(1, 10, 3); // heltall fra 1 til 10 med steg 3
    // [1, 4, 7, 10]
    IntInterval oddsFrom1To10 =
      IntInterval.oddsFromTo(1, 10); // oddetall fra 1 til 10
    // [1, 3, 5, 7, 9]
    IntInterval evensFrom1To10 =
      IntInterval.evensFromTo(1, 10); // partall fra 1 til 10
    // [2, 4, 6, 8, 10]

## Reduser minnefotavtrykket
med minneeffektive containere

Eclipse Collections gir minneeffektiv implementasjon av Sets og Maps, samt primitive samlinger.

## Lær Eclipse Collections med kodekata

Ta en titt på Eclipse Collections Kata – en gøy måte å hjelpe deg å lære den idiomatiske bruken av Eclipse Collections. Denne spesielle kataen er satt opp som en serie enhetstester som feiler. Din oppgave er å få dem til å passere ved hjelp av Eclipse Collections.

    @Test
    public void getFirstNamesOfAllPeople()
    {
      MutableList<Person> people = this.people;
      MutableList<String> firstNames = null; //Replace null, with a transformation method on 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);
    }

## Historien til Eclipse Collections

Opprinnelig startet Eclipse Collections som et samlingsrammeverk kalt Caramel på Goldman Sachs i 2004. Siden den gang har rammeverket utviklet seg, og i 2012 ble det lagt ut som åpen kiledekode på GitHub som et prosjekt kalt GS Collections.
GS Collections har blitt presentert på en rekke konferanser, inkludert JVM Summit i 2012 og JavaOne i 2014. En sammenligning av ytelse mellom parallelle lazy implementasjoner i Java 8, Scala og GS Collections ble presentert på QCon New York i 2014. Videre ble artikler om GS Collections (Del 1 / Del 2) publisert på InfoQ.com. Disse artiklene viser noen av funksjonene i rammeverket gjennom eksempler, samt et intervju med skaperen av GS Collections.
Gjennom årene har rundt 40 utviklere fra det samme selskapet bidratt til rammeverket.
For å utnytte fullt ut prosjektets potensiale som et åpen kildekode-prosjekt, ble GS Collections migrert til Eclipse Foundation og endret navn til Eclipse Collections i 2015. Nå er rammeverket helt åpent og aksepterer bidrag fra alle!

## Veiledning

En omfattende referansehåndbok for biblioteket er tilgjengelig på GitHub: Reference Guide.

## Kildekode

Kildekoden er tilgjengelig på GitHub: Eclipse Collections.

### Bidra

Vi tar med glede imot bidrag!
Eclipse Collections Project Roadmap finner du her.
Vi godtar bidrag via pull-forespørsler på GitHub. Se denne artikkelen om hvordan du kan bidra for å komme i gang.

### Siste nytt

Eclipse Collections 11.0.0 released (Nov 23rd 2021)

Eclipse Collections 10.4.0 released (Aug 20th 2020)

Eclipse Collections 10.3.0 released (Aug 8th 2020)

Eclipse Collections 10.2.0 released (Feb 11th 2020)

Eclipse Collections 10.1.0 released (Dec 4th 2019)

Eclipse Collections 10.0.0 released (Jul 10th 2019)

### Nyttige lenker

Eclipse PMI: eclipse project management infrastructure

GitHub: eclipse-collections

Feilmeldinger og andre saker: GitHub issues

Mailinglister: collections-dev-mailinglisten

Wiki: GitHub wiki

Forum: Eclipse Collections Forum

StackOverflow: tagget med eclipse-collections

### - Flere funksjoner, mindre søppel -