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" />
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());
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]
Eclipse Collections gir minneeffektiv implementasjon av Sets og Maps, samt primitive samlinger.
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);
}
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!
En omfattende referansehåndbok for biblioteket er tilgjengelig på GitHub: Reference Guide.
Kildekoden er tilgjengelig på GitHub: Eclipse Collections.