Commons Collections aprimora o Java Collections Framework. Ele fornece várias funções para facilitar o processamento da coleção. Ele fornece muitas novas interfaces, implementações e utilitários. As principais funções das Coleções Comuns são as seguintes
-
Bag - A interface Bag simplifica as coleções com várias cópias de cada objeto.
-
BidiMap - A interface BidiMap fornece um mapa bidirecional que pode ser usado para pesquisar um valor usando uma chave ou uma chave usando um valor.
-
MapIterator - A interface MapIterator fornece iteração iterativa simples e fácil.
-
Transforming Decorators − Transforming decorators podem alterar cada objeto de uma coleção quando ele é adicionado à coleção.
-
Coleções compostas - Use coleções compostas quando precisar lidar com várias coleções uniformemente.
-
Mapa ordenado − Um mapa ordenado preserva a ordem em que os elementos foram adicionados.
-
Conjunto ordenado − Um conjunto ordenado preserva a ordem em que os elementos foram adicionados.
-
Mapa de referência - Os mapas de referência permitem que chaves/valores sejam coletados como lixo sob controle rigoroso.
-
Implementações do comparador − Muitas implementações do Comparator estão disponíveis.
-
Implementações do Iterator − Muitas implementações do Iterator estão disponíveis.
-
Classes de adaptadores - As classes de adaptadores podem ser usadas para converter arrays e enumerações em coleções.
-
Utilitários - Utilitários disponíveis para testar ou criar propriedades típicas de conjuntos teóricos, por exemplo, união, interseção. O suporte está desativado.
Coleções Comuns - Bolsa
Bag define uma coleção para contar o número de vezes que um objeto aparece na coleção. Por exemplo, se Bag contiver {a, a, b, c}, getCount("a") retornará 2 e uniqueSet() retornará valores exclusivos.
import org.apache.commons.collections4.Bag;
import org.apache.commons.collections4.bag.HashBag;
public class BagTester {
public static void main(String[] args) {
Bag<String> bag = new HashBag<>();
//add "a" two times to the bag.
bag.add("a" , 2);
//add "b" one time to the bag.
bag.add("b");
//add "c" one time to the bag.
bag.add("c");
//add "d" three times to the bag.
bag.add("d",3);
//get the count of "d" present in bag.
System.out.println("d is present " + bag.getCount("d") + " times.");
System.out.println("bag: " +bag);
//get the set of unique values from the bag
System.out.println("Unique Set: " +bag.uniqueSet());
//remove 2 occurrences of "d" from the bag
bag.remove("d",2);
System.out.println("2 occurences of d removed from bag: " +bag);
System.out.println("d is present " + bag.getCount("d") + " times.");
System.out.println("bag: " +bag);
System.out.println("Unique Set: " +bag.uniqueSet());
}
}
Ele imprimirá o seguinte resultado:
d is present 3 times.
bag: [2:a,1:b,1:c,3:d]
Unique Set: [a, b, c, d]
2 occurences of d removed from bag: [2:a,1:b,1:c,1:d]
d is present 1 times.
bag: [2:a,1:b,1:c,1:d]
Unique Set: [a, b, c, d]
Coleções Comuns - BidiMap
Com um mapa bidirecional, a chave pode ser pesquisada usando o valor, e o valor pode ser facilmente pesquisado usando a chave.
import org.apache.commons.collections4.BidiMap;
import org.apache.commons.collections4.bidimap.TreeBidiMap;
public class BidiMapTester {
public static void main(String[] args) {
BidiMap<String, String> bidi = new TreeBidiMap<>();
bidi.put("One", "1");
bidi.put("Two", "2");
bidi.put("Three", "3");
System.out.println(bidi.get("One"));
System.out.println(bidi.getKey("1"));
System.out.println("Original Map: " + bidi);
bidi.removeValue("1");
System.out.println("Modified Map: " + bidi);
BidiMap<String, String> inversedMap = bidi.inverseBidiMap();
System.out.println("Inversed Map: " + inversedMap);
}
}
Ele imprimirá o seguinte resultado.
1
One
Original Map: {One=1, Three=3, Two=2}
Modified Map: {Three=3, Two=2}
Inversed Map: {2=Two, 3=Three}
Coleções comuns - MapIterator
A interface JDK Map é difícil de iterar porque a iteração é feita em objetos EntrySet ou KeySet. MapIterator fornece iteração simples sobre mapas.
import org.apache.commons.collections4.IterableMap;
import org.apache.commons.collections4.MapIterator;
import org.apache.commons.collections4.map.HashedMap;
public class MapIteratorTester {
public static void main(String[] args) {
IterableMap<String, String> map = new HashedMap<>();
map.put("1", "One");
map.put("2", "Two");
map.put("3", "Three");
map.put("4", "Four");
map.put("5", "Five");
MapIterator<String, String> iterator = map.mapIterator();
while (iterator.hasNext()) {
Object key = iterator.next();
Object value = iterator.getValue();
System.out.println("key: " + key);
System.out.println("Value: " + value);
iterator.setValue(value + "_");
}
System.out.println(map);
}
}
Ele imprimirá o seguinte resultado.
key: 3
Value: Three
key: 5
Value: Five
key: 2
Value: Two
key: 4
Value: Four
key: 1
Value: One
{3=Three_, 5=Five_, 2=Two_, 4=Four_, 1=One_}
Coleções comuns - OrderedMap
OrderedMap é uma nova interface para mapas que preserva a ordem em que os elementos foram adicionados. LinkedMap e ListOrderedMap são duas implementações disponíveis. Essa interface oferece suporte a iteradores para mapas e permite iterar em ambas as direções para frente ou para trás no mapa.
import org.apache.commons.collections4.OrderedMap;
import org.apache.commons.collections4.map.LinkedMap;
public class OrderedMapTester {
public static void main(String[] args) {
OrderedMap<String, String> map = new LinkedMap<String, String>();
map.put("One", "1");
map.put("Two", "2");
map.put("Three", "3");
System.out.println(map.firstKey());
System.out.println(map.nextKey("One"));
System.out.println(map.nextKey("Two"));
}
}
Ele imprimirá o seguinte resultado.
One
Two
Three
Coleções Comuns - Ignorar NULL
A classe CollectionUtils da biblioteca Apache Commons Collections fornece vários métodos utilitários para operações comuns, abrangendo uma ampla variedade de casos de uso. Isso ajuda a evitar escrever código clichê. Esta biblioteca era muito útil antes do jdk 8, já que a Stream API do Java 8 agora fornece funcionalidade semelhante.
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
CollectionUtils.addIgnoreNull(list, null);
CollectionUtils.addIgnoreNull(list, "a");
System.out.println(list);
if(list.contains(null)) {
System.out.println("Null value is present");
} else {
System.out.println("Null value is not present");
}
}
}
Ele imprimirá o seguinte resultado.
[a]
Null value is not present
Mesclar e Classificar
A classe CollectionUtils da biblioteca Apache Commons Collections fornece vários métodos utilitários para operações comuns, abrangendo uma ampla variedade de casos de uso. Isso ajuda a evitar escrever código clichê. Esta biblioteca era muito útil antes do jdk 8, já que a Stream API do Java 8 agora fornece funcionalidade semelhante.
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
List<String> sortedList1 = Arrays.asList("A","C","E");
List<String> sortedList2 = Arrays.asList("B","D","F");
List<String> mergedList = CollectionUtils.collate(sortedList1, sortedList2);
System.out.println(mergedList);
}
}
Ele imprimirá o seguinte resultado.
[A, B, C, D, E, F]
Cheques vazios seguros
A classe CollectionUtils da biblioteca Apache Commons Collections fornece vários métodos utilitários para operações comuns, abrangendo uma ampla variedade de casos de uso. Isso ajuda a evitar escrever código clichê. Esta biblioteca era muito útil antes do jdk 8, já que a Stream API do Java 8 agora fornece funcionalidade semelhante.
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
List<String> list = getList();
System.out.println("Non-Empty List Check: " + checkNotEmpty1(list));
System.out.println("Non-Empty List Check: " + checkNotEmpty1(list));
}
static List<String> getList() {
return null;
}
static boolean checkNotEmpty1(List<String> list) {
return !(list == null || list.isEmpty());
}
static boolean checkNotEmpty2(List<String> list) {
return CollectionUtils.isNotEmpty(list);
}
}
Ele imprimirá o seguinte resultado.
Non-Empty List Check: false
Non-Empty List Check: false
Coleções Comuns - Inclusão
verifica se uma lista faz parte de outra lista
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
//checking inclusion
List<String> list1 = Arrays.asList("A","A","A","C","B","B");
List<String> list2 = Arrays.asList("A","A","B","B");
System.out.println("List 1: " + list1);
System.out.println("List 2: " + list2);
System.out.println("Is List 2 contained in List 1: "
+ CollectionUtils.isSubCollection(list2, list1));
}
}
Ele imprimirá o seguinte resultado.
List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Is List 2 contained in List 1: true
Coleções Comuns - Interseção
Usado para obter objetos comuns entre duas coleções (interseção)
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
//checking inclusion
List<String> list1 = Arrays.asList("A","A","A","C","B","B");
List<String> list2 = Arrays.asList("A","A","B","B");
System.out.println("List 1: " + list1);
System.out.println("List 2: " + list2);
System.out.println("Commons Objects of List 1 and List 2: "
+ CollectionUtils.intersection(list1, list2));
}
}
Ele imprimirá o seguinte resultado.
List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Commons Objects of List 1 and List 2: [A, A, B, B]
Coleções Comuns - Subtração
Obtém uma nova coleção subtraindo objetos de uma coleção de outras coleções
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
//checking inclusion
List<String> list1 = Arrays.asList("A","A","A","C","B","B");
List<String> list2 = Arrays.asList("A","A","B","B");
System.out.println("List 1: " + list1);
System.out.println("List 2: " + list2);
System.out.println("List 1 - List 2: "
+ CollectionUtils.subtract(list1, list2));
}
}
Ele imprimirá o seguinte resultado.
List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
List 1 - List 2: [A, C]
Coleções Comuns - União
Usado para obter a união de duas coleções
import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
public class CollectionUtilsTester {
public static void main(String[] args) {
//checking inclusion
List<String> list1 = Arrays.asList("A","A","A","C","B","B");
List<String> list2 = Arrays.asList("A","A","B","B");
System.out.println("List 1: " + list1);
System.out.println("List 2: " + list2);
System.out.println("Union of List 1 and List 2: "
+ CollectionUtils.union(list1, list2));
}
}
Ele imprimirá o seguinte resultado.
List 1: [A, A, A, C, B, B]
List 2: [A, A, B, B]
Union of List 1 and List 2: [A, A, A, B, B, C]