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.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" />
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.