Eclipse Collections su daleko najbolje kolekcije za Javu
koje će ti doneti radost u razvoju softvera.
Integriši ih u svoj kod koristeći neki od build alata!
<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" />
Iskoristi svu moć Java 8 Lambda izraza i referenci na metode kroz bogat API koji je dostupan nad svim kolekcijama.
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());
Možeš koristiti različite tipove kontejnerskih klasa i instancirati ih preko factory metoda.
//Inicijalizacija promenljive liste metodama 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"); //Razni tipovi kontejnera 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");
//Inicijalizacija nepromenljive liste metodama 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"); //Razni tipovi kontejnera 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");
//Promenljive i nepromenljive liste, skupovi, vreće, stekovi i mape su dostupne za svih 8 primitivnih tipova 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); //Možeš napraviti opseg celih brojeva koristeći IntInterval IntInterval oneTo10 = IntInterval.fromTo(1, 10); // celi brojevi od 1 do 10 // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] IntInterval oneTo10By3 = IntInterval.fromToBy(1, 10, 3); // svaki treći ceo broj od 1 do 10 // [1, 4, 7, 10] IntInterval oddsFrom1To10 = IntInterval.oddsFromTo(1, 10); // neparni celi brojevi od 1 do 10 // [1, 3, 5, 7, 9] IntInterval evensFrom1To10 = IntInterval.evensFromTo(1, 10); // parni celi brojevi od 1 do 10 // [2, 4, 6, 8, 10]
Eclipse Collections ima implementacije skupova i mapa ali i kolekcije primitivnih tipova koje su memorijski efikasne.
Eclipse Collections Kata će ti pomoći da naučiš pravilnu upotrebu Eclipse Collections. Ova kata je zapravo niz unit testova koji ne prolaze. Tvoja misija je da ih "nateraš" da prođu koristeći Eclipse Collections.
@Test public void getFirstNamesOfAllPeople() { MutableList<Person> people = this.people; MutableList<String> firstNames = null; //Zameni null nekim metodom koji menja 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 su počele svoj život pod nazivom Caramel u firmi Goldman Sachs u 2004. godini.
Frejmvork se razvijao i u 2012. je postao open-source pod nazivom
GS Collections.
GS Collections je predstavljen na nekoliko
konferencija
kao što su JVM Summit 2012. godine i JavaOne 2014. godine.
Uporedni test performansi paralelnih lazy implementacija u Javi, Scali i GS Collections je predstavljen na
QCon New York 2014. godine.
Takođe mnogi članci o GS Collections
(Prvi deo /
Drugi deo)
su objavljeni na sajtu InfoQ.com.
Oni pokazuju mogućnosti frejmvorka kroz praktične primere i razgovore sa autorom GS Collections.
Sledećih godina je preko 40 programera iz iste firme dalo svoj doprinos frejmvorku.
Da bi se u potpunosti iskoristila open-source priroda projekta, GS Collections se seli u Eclipse Foundation i dobija novo ime Eclipse Collections u 2015. godini.
Frejmvork je sada potpuno otvoren i prima doprinose od open-source zajednice!
Detaljni referentni vodič za ovu biblioteku se nalazi na GitHubu: Referentni vodič.
Izvorni kod se nalazi na GitHubu: Eclipse Collections.