Quant à l'explication d'Eclipse Collections elle-même, je pense qu'il y a beaucoup d'autres bons articles, donc ici je vais le télécharger comme une référence à laquelle vous pouvez vous référer immédiatement lorsque vous pensez "Je veux faire XX". Pour le moment, j'ai essayé de lister ceux que j'utilise souvent, mais je peux les ajouter s'ils sortent.
Ver.8.0.0
pom.xml
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections-api</artifactId>
<version>8.0.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.collections</groupId>
<artifactId>eclipse-collections</artifactId>
<version>8.0.0</version>
</dependency>
empty
Lists.mutable.empty();
À partir de ce moment, immutable (ImmutableList) peut être utilisé en plus de mutable (MutableList), sauf indication contraire. ImmutableList n'a pas de méthodes telles que add et ne peut pas être modifiée.
empty
Lists.immutable.empty();
of
Lists.mutable.of(first, second, third);
Vous pouvez convertir java.util.List etc. en ImmutableList etc.
ofall
Lists.immutable.ofAll(hogeList);
select
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.select(s -> s.contains("g"))
.makeString()
, is("hoge, fuga")
);
ʻAnySatisfy` renvoie true s'il y a au moins un élément qui remplit la condition.
anySatisfy
ListIterable<String> hogeList = Lists.mutable.of("hoge", null, "fuga");
assertThat(
hogeList.anySatisfy(s -> s == null)
, is(true)
);
noneSatisfy
renvoie true s'il n'y a aucun élément qui remplit la condition.
noneSatisfy
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList.noneSatisfy(s -> s.equals("hogera"))
, is(true)
);
detect
récupère uniquement le premier des éléments qui remplissent la condition.
detect
ListIterable<String> hogeList = Lists.mutable.of(null, "hoge", "fuga");
assertThat(
hogeList.detect(s -> s != null).toString()
, is("hoge")
);
collect
ListIterable<String> hogeList = Lists.mutable.of("hogehoge", "fuga", "piyopi");
assertThat(
hogeList
.collect(s -> s.length())
.makeString()
, is("8, 4, 6")
);
Éliminez la duplication et ne laissez que des éléments uniques.
distinct
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo", "fuga", "piyo");
assertThat(
hogeList
.distinct()
.makeString()
, is("hoge, fuga, piyo")
);
Il est également possible de préciser les critères pour juger qu'il est unique. À ce stade, seul le premier des éléments en double reste dans la liste des résultats.
distinct
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo", "fugafuga", "piyopiyo");
assertThat(
hogeList
.distinct(HashingStrategies.fromFunction(s -> s.length()))
.makeString()
, is("hoge, fugafuga")
);
sortThis
MutableList<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.sortThis()
.makeString()
, is("fuga, hoge, piyo")
);
Il est également possible de spécifier les critères de tri et de trier par ordre décroissant.
sortThisBy
MutableList<String> hogeList = Lists.mutable.of("hogehoge", "fuga", "piyopi");
assertThat(
hogeList
.sortThisBy(s -> s.length())
.reverseThis()
.makeString()
, is("hogehoge, piyopi, fuga")
);
Si vous voulez répéter le processus et continuer à écrire, il y a aussi «tap».
each
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
hogeList
.each(s ->
System.out.println(s)
);
//Résultat d'exécution
//hoge
//fuga
//piyo
Avec forEachWithIndex, vous pouvez effectuer une boucle avec index.
forEachWithIndex
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
hogeList
.forEachWithIndex((string, index) ->
System.out.println(String.valueOf(index).concat(string))
);
//Résultat d'exécution
//0hoge
//1fuga
//2piyo
Avec groupBy, vous pouvez grouper par la valeur spécifiée.
Il revient dans le type ListMultimap
et peut être récupéré de différentes manières, mais j'aime l'utiliser comme Pair
(discuté ci-dessous) avec la méthodekeyMultiValuePairsView ()
.
groupBy
ListIterable<String> hogeList = Lists.mutable.of("hoge", "hogera", "fuga", "fugafuga", "piyo", "piyopiyo");
hogeList
.groupBy(s -> s.length())
.keyMultiValuePairsView()
.each(p ->{
System.out.println(p.getOne() + " -> " + p.getTwo());
});
//Résultat d'exécution
//4 -> [hoge, fuga, piyo]
//6 -> [hogera]
//8 -> [fugafuga, piyopiyo]
sumOfInt
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.sumOfInt(s -> s.length())
, is(12L)
);
S'il n'y a aucun élément, null est renvoyé.
getFirst
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.select(s -> s.contains("g"))
.getFirst()
, is("hoge")
);
Encore une fois, s'il n'y a aucun élément, null est renvoyé.
getLast
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.select(s -> s.contains("g"))
.getLast()
, is("fuga")
);
Si vous devez être capable de restreindre les éléments à un seul avec select
, etc., utilisez getOnly.
IllegalStateException est levé s'il y a plus d'un élément.
getOnly
ListIterable<String> hogeList = Lists.mutable.of("hoge", "fuga", "piyo");
assertThat(
hogeList
.select(s -> s.contains("i"))
.getOnly()
, is("piyo")
);
Les collections standard telles que java.util.List
sont souvent utilisées dans les frameworks utilisés dans les projets.
Dans un tel cas, si vous voulez utiliser Eclipse Collections, vous devrez le convertir une fois en type Eclipse Collections avec ʻofAll` etc. comme indiqué ci-dessous, mais ce sera un peu dérangeant si le nombre augmente.
Ont tendance à être comme ça
List<String> hogeList = Arrays.asList("konna", "fuuni", "shiteita");
ImmutableList<String> fugaList = Lists.immutable.ofAll(hogeList);
fugaList.select(s -> s.length > 4);
Dans un tel cas, vous pouvez utiliser la méthode des collestions d'éclipse en une seule fois en utilisant ListAdapter
.
Si c'est ʻArray au lieu de
List, il y a aussi ʻArrayAdapter
.
C'était bon
List<String> hogeList = Arrays.asList("kore", "de", "yokatta");
ListAdapter.adapt(hogeList)
.select(s -> s.length > 4);
Il y a aussi ListIterate
et ʻArrayIterate` qui ne nécessitent même pas d'adaptation.
ListIterate
List<String> hogeList = Arrays.asList("adapt", "mo", "shinai");
ListIterate.select(hogeList, s -> s.length > 4);
Il est utilisé lorsque vous souhaitez avoir des données sous forme de paire clé et valeur. Deux types d'instances peuvent être créés à partir de «Tuples». Pair<T1, T2> Cliquez ici pour les différents types.
Pair
Pair<String, Object> keyValuePair = Tuples.pair("key", value);
String key = keyValuePair.getOne();
Object value = keyValuePair.getTwo();
Twin
Twin
Twin<String> keyValueTwin = Tuples.twin("key", "valiue");
String key = keyValueTwin.getOne();
String value = keyValueTwin.getTwo();
Si une exception de vérification se produit dans le lambda, le code qui a été écrit de manière concise sera ruiné. Dans un tel cas, importez statiquement les éléments suivants et utilisez la méthode de lancement.
import static org.eclipse.collections.impl.block.factory.Procedures.*;
import static org.eclipse.collections.impl.block.factory.Functions.*;
import static org.eclipse.collections.impl.block.factory.Predicates.*;
Si une exception se produit lors de la levée, elle l'enveloppera dans une RuntimeException et la relancera. Maintenant, je peux l'écrire de manière concise.
throwing
hogeList
.each(throwing(Fuga::piyo)
;
Recommended Posts