Eclipse Collections

- Mogućnosti koje želiš sa kolekcijama koje su ti potrebne -


Početak rada sa
Eclipse Collections

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

Bogat, koncizan i čitljiv API

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

Mnogi tipovi kontejnerskih klasa kao što su
nepromenljive kolekcije, kolekcije primitivnih tipova, bimape, multimape i vreće (bags)

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]

Smanji zauzeće memorije
koristeći efikasne kontejnere

Eclipse Collections ima implementacije skupova i mapa ali i kolekcije primitivnih tipova koje su memorijski efikasne.


Nauči Eclipse Collections radeći kate

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

Istorija Eclipse Collections

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!

Referentni vodič

Detaljni referentni vodič za ovu biblioteku se nalazi na GitHubu: Referentni vodič.

Izvorni kod

Izvorni kod se nalazi na GitHubu: Eclipse Collections.