Guava - Guia Rápido
O que é goiaba?
Guava é uma biblioteca de código aberto baseada em Java e contém muitas bibliotecas centrais do Google, que estão sendo usadas em muitos de seus projetos. Facilita as melhores práticas de codificação e ajuda a reduzir os erros de codificação. Ele fornece métodos utilitários para coleções, armazenamento em cache, suporte a primitivos, simultaneidade, anotações comuns, processamento de strings, E / S e validações.
Benefícios da goiaba
Standardized - A biblioteca Guava é gerenciada pelo Google.
Efficient - É uma extensão confiável, rápida e eficiente da biblioteca padrão Java.
Optimized - A biblioteca é altamente otimizada.
Functional Programming - Adiciona capacidade de processamento funcional ao Java.
Utilities - Ele fornece muitas classes de utilitários que são regularmente necessárias no desenvolvimento de aplicativos de programação.
Validation - Fornece um mecanismo de validação padrão à prova de falhas.
Best Practices - Enfatiza as melhores práticas.
Considere o seguinte trecho de código.
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer a = null;
Integer b = new Integer(10);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Integer a, Integer b) {
return a + b;
}
}
Execute o programa para obter o seguinte resultado.
Exception in thread "main" java.lang.NullPointerException
at GuavaTester.sum(GuavaTester.java:13)
at GuavaTester.main(GuavaTester.java:9)
A seguir estão os problemas com o código.
sum () não está cuidando de nenhum dos parâmetros a serem passados como nulos.
a função de chamada também não está preocupada em passar um valor nulo para o método sum () acidentalmente.
Quando o programa é executado, ocorre NullPointerException.
A fim de evitar os problemas acima, a verificação nula deve ser feita em todo e qualquer lugar onde tais problemas estejam presentes.
Vamos ver o uso de Optional, uma classe de utilitário fornecida pelo Guava, para resolver os problemas acima de uma forma padronizada.
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer invalidInput = null;
Optional<Integer> a = Optional.of(invalidInput);
Optional<Integer> b = Optional.of(new Integer(10));
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
return a.get() + b.get();
}
}
Execute o programa para obter o seguinte resultado.
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.base.Optional.of(Optional.java:85)
at GuavaTester.main(GuavaTester.java:8)
Vamos entender os conceitos importantes do programa acima.
Optional - Uma classe de utilitário, para fazer com que o código use o nulo corretamente.
Optional.of- Retorna a instância da classe opcional a ser usada como parâmetro. Ele verifica se o valor passado não é 'nulo'.
Optional.get - Obtém o valor da entrada armazenada na classe Opcional.
Usando a classe Opcional, você pode verificar se o método do chamador está passando um parâmetro adequado ou não.
Configuração de ambiente local
Se você ainda deseja configurar seu ambiente para a linguagem de programação Java, esta seção o orienta sobre como fazer download e configurar o Java em sua máquina. Siga as etapas mencionadas abaixo para configurar o ambiente.
Java SE está disponível gratuitamente no link Download Java . Portanto, você baixa uma versão com base em seu sistema operacional.
Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir variáveis de ambiente para apontar para os diretórios de instalação corretos -
Configurando o caminho para Windows 2000 / XP
Estamos assumindo que você instalou o Java no diretório c: \ Arquivos de programas \ java \ jdk -
Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.
Clique no botão 'Variáveis de ambiente' na guia 'Avançado'.
Agora, altere a variável 'Path' para que também contenha o caminho para o executável Java. Exemplo, se o caminho está definido atualmente para 'C: \ WINDOWS \ SYSTEM32', altere seu caminho para 'C: \ WINDOWS \ SYSTEM32; c: \ Arquivos de programas \ java \ jdk \ bin'.
Configurando o Caminho para Windows 95/98 / ME
Estamos assumindo que você instalou o Java no diretório c: \ Arquivos de programas \ java \ jdk -
Edite o arquivo 'C: \ autoexec.bat' e adicione a seguinte linha no final - 'SET PATH =% PATH%; C: \ Arquivos de programas \ java \ jdk \ bin'
Configurando o caminho para Linux, UNIX, Solaris, FreeBSD
A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do shell se tiver problemas para fazer isso.
Por exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final de seu '.bashrc: export PATH = / path / to / java: $ PATH'
Editores Java populares
Para escrever seus programas Java, você precisa de um editor de texto. Existem muitos IDEs sofisticados disponíveis no mercado. Mas, por agora, você pode considerar um dos seguintes -
Notepad - Na máquina Windows você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial), TextPad.
Netbeans - É um IDE Java de código aberto e gratuito que pode ser baixado de https://www.netbeans.org/index.html.
Eclipse - Também é um IDE Java desenvolvido pela comunidade de código aberto eclipse e pode ser baixado de https://www.eclipse.org/.
Baixar Arquivo Guava
Baixe a versão mais recente do arquivo jar Guava de guava-18.0.jar . No momento de escrever este tutorial, baixamos guava-18.0.jar e o copiamos para a pasta C: \> Guava.
SO | Nome do arquivo |
---|---|
janelas | guava-18.0.jar |
Linux | guava-18.0.jar |
Mac | guava-18.0.jar |
Definir ambiente de goiaba
Colocou o Guava_HOMEvariável de ambiente para apontar para o local do diretório base onde o jar Guava está armazenado em sua máquina. Presumindo que extraímos guava-18.0.jar na pasta Guava em vários sistemas operacionais, conforme a seguir.
SO | Resultado |
---|---|
janelas | Defina a variável de ambiente Guava_HOME para C: \ Guava |
Linux | export Guava_HOME = / usr / local / Guava |
Mac | export Guava_HOME = / Library / Guava |
Definir variável CLASSPATH
Colocou o CLASSPATHvariável de ambiente para apontar para a localização do jarro de goiaba. Supondo que você tenha armazenado guava-18.0.jar na pasta Guava em vários sistemas operacionais, conforme a seguir.
SO | Resultado |
---|---|
janelas | Defina a variável de ambiente CLASSPATH como% CLASSPATH%;% Guava_HOME% \ guava-18.0.jar;.; |
Linux | export CLASSPATH = $ CLASSPATH: $ Guava_HOME / guava-18.0.jar :. |
Mac | export CLASSPATH = $ CLASSPATH: $ Guava_HOME / guava-18.0.jar :. |
Opcional é um objeto imutável usado para conter um objeto não nulo. O objeto opcional é usado para representar nulo com valor ausente. Esta classe possui vários métodos utilitários para facilitar o código para manipular valores como disponíveis ou não disponíveis em vez de verificar valores nulos.
Declaração de Classe
A seguir está a declaração para com.google.common.base.Optional<T> classe -
@GwtCompatible(serializable = true)
public abstract class Optional<T>
extends Object
implements Serializable
Métodos de aula
Sr. Não | Método e Descrição |
---|---|
1 | static <T> Optional<T> absent() Retorna uma instância opcional sem referência contida. |
2 | abstract Set<T> asSet() Retorna um conjunto de singleton imutável cujo único elemento é a instância contida, se estiver presente; caso contrário, um conjunto vazio imutável. |
3 | abstract boolean equals(Object object) Retorna verdadeiro se o objeto for uma instância opcional e as referências contidas forem iguais ou ambas estiverem ausentes. |
4 | static <T> Optional<T> fromNullable(T nullableReference) Se nullableReference não for nulo, retorna uma instância opcional contendo essa referência; caso contrário, retorna absent (). |
5 | abstract T get() Retorna a instância contida, que deve estar presente. |
6 | abstract int hashCode() Retorna um código hash para esta instância. |
7 | abstract boolean isPresent() Retorna verdadeiro se este portador contém uma instância (não nula). |
8 | static <T> Optional<T> of(T reference) Retorna uma instância opcional contendo a referência não nula fornecida. |
9 | abstract Optional<T> or(Optional<? extends T> secondChoice) Retorna opcional se tiver um valor presente; secondChoice caso contrário. |
10 | abstract T or(Supplier<? extends T> supplier) Retorna a instância contida se estiver presente; fornecedor.get () caso contrário. |
11 | abstract T or(T defaultValue) Retorna a instância contida se estiver presente; caso contrário, defaultValue. |
12 | abstract T orNull() Retorna a instância contida se estiver presente; caso contrário, null. |
13 | static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) Retorna o valor de cada instância presente dos opcionais fornecidos, em ordem, ignorando as ocorrências de absent (). |
14 | abstract String toString() Retorna uma representação de string para esta instância. |
15 | abstract <V> Optional<V> transform(Function<? super T,V> function) Se a instância estiver presente, ela será transformada com a função fornecida; caso contrário, absent () é retornado. |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe opcional
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.fromNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.fromNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
//Optional.isPresent - checks the value is present or not
System.out.println("First parameter is present: " + a.isPresent());
System.out.println("Second parameter is present: " + b.isPresent());
//Optional.or - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.or(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
First parameter is present: false
Second parameter is present: true
10
As pré-condições fornecem métodos estáticos para verificar se um método ou construtor é chamado com o parâmetro adequado ou não. Ele verifica as pré-condições. Seus métodos lançam IllegalArgumentException em caso de falha.
Declaração de Classe
A seguir está a declaração para com.google.common.base.Preconditions classe -
@GwtCompatible
public final class Preconditions
extends Object
Métodos de aula
Sr. Não | Método e Descrição |
---|---|
1 | static void checkArgument(boolean expression) Garante a veracidade de uma expressão envolvendo um ou mais parâmetros para o método de chamada. |
2 | static void checkArgument(boolean expression, Object errorMessage) Garante a veracidade de uma expressão envolvendo um ou mais parâmetros para o método de chamada. |
3 | static void checkArgument(boolean expression, String errorMessageTemplate, Object. errorMessageArgs) Garante a veracidade de uma expressão envolvendo um ou mais parâmetros para o método de chamada. |
4 | static int checkElementIndex(int index, int size) Garante que o índice especifica um elemento válido em uma matriz, lista ou string de tamanho. |
5 | static int checkElementIndex(int index, int size, String desc) Garante que o índice especifique um elemento válido em uma matriz, lista ou string de tamanho. |
6 | static <T> T checkNotNull(T reference) Garante que uma referência de objeto passada como parâmetro para o método de chamada não seja nula. |
7 | static <T> T checkNotNull(T reference, Object errorMessage) Garante que uma referência de objeto passada como parâmetro para o método de chamada não seja nula. |
8 | static <T> T checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs) Garante que uma referência de objeto passada como parâmetro para o método de chamada não seja nula. |
9 | static int checkPositionIndex(int index, int size) Garante que o índice especifica uma posição válida em uma matriz, lista ou string de tamanho. |
10 | static int checkPositionIndex(int index, int size, String desc) Garante que o índice especifica uma posição válida em uma matriz, lista ou string de tamanho. |
11 | static void checkPositionIndexes(int start, int end, int size) Garante que o início e o fim especifiquem posições válidas em uma matriz, lista ou string de tamanho e estejam em ordem. |
12 | static void checkState(boolean expression) Garante a veracidade de uma expressão que envolve o estado da instância de chamada, mas não envolve nenhum parâmetro para o método de chamada. |
13 | static void checkState(boolean expression, Object errorMessage) Garante a veracidade de uma expressão que envolve o estado da instância de chamada, mas não envolve nenhum parâmetro para o método de chamada. |
14 | static void checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) Garante a veracidade de uma expressão que envolve o estado da instância de chamada, mas não envolve nenhum parâmetro para o método de chamada. |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe de pré-condições
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import com.google.common.base.Preconditions;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
try {
System.out.println(guavaTester.sqrt(-3.0));
} catch(IllegalArgumentException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.sum(null,3));
} catch(NullPointerException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.getValue(6));
} catch(IndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
public double sqrt(double input) throws IllegalArgumentException {
Preconditions.checkArgument(input > 0.0,
"Illegal Argument passed: Negative value %s.", input);
return Math.sqrt(input);
}
public int sum(Integer a, Integer b) {
a = Preconditions.checkNotNull(a, "Illegal Argument passed: First parameter is Null.");
b = Preconditions.checkNotNull(b, "Illegal Argument passed: Second parameter is Null.");
return a+b;
}
public int getValue(int input) {
int[] data = {1,2,3,4,5};
Preconditions.checkElementIndex(input,data.length, "Illegal Argument passed: Invalid index.");
return 0;
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
Illegal Argument passed: Negative value -3.0.
Illegal Argument passed: First parameter is Null.
Illegal Argument passed: Invalid index. (6) must be less than size (5)
O pedido pode ser visto como um comparador enriquecido com funcionalidade de encadeamento aprimorada, vários métodos de utilidade, capacidade de classificação de vários tipos, etc.
Declaração de Classe
A seguir está a declaração para com.google.common.collect.Ordering<T> classe -
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
Métodos de aula
Sr. Não | Método e Descrição |
---|---|
1 | static Ordering<Object> allEqual() Retorna uma ordem que trata todos os valores como iguais, indicando "sem ordem". Passar essa ordem para qualquer algoritmo de classificação estável não resulta em nenhuma alteração na ordem dos elementos. |
2 | static Ordering<Object> arbitrary() Retorna uma ordem arbitrária sobre todos os objetos, para a qual compare (a, b) == 0 implica a == b (igualdade de identidade). |
3 | int binarySearch(List<? extends T> sortedList, T key) Pesquisa SortList para a chave usando o algoritmo de pesquisa binária. |
4 | abstract int compare(T left, T right) Compara seus dois argumentos para ordem. |
5 | <U extends T> Ordering<U> compound(Comparator<? super U> secondaryComparator) Retorna uma ordenação que primeiro usa a ordenação this, mas que em caso de "empate", então delega para secondaryComparator. |
6 | static <T> Ordering<T> compound(Iterable<? extends Comparator<? super T>> comparators) Retorna uma ordem que tenta cada comparador fornecido em ordem até que um resultado diferente de zero seja encontrado, retornando esse resultado e retornando zero apenas se todos os comparadores retornarem zero. |
7 | static <T> Ordering<T> explicit(List<T> valuesInOrder) Retorna uma ordem que compara objetos de acordo com a ordem em que aparecem na lista fornecida. |
8 | static <T> Ordering<T> explicit(T leastValue, T... remainingValuesInOrder) Retorna uma ordem que compara objetos de acordo com a ordem em que são fornecidos a este método. |
9 | static <T> Ordering<T> from(Comparator<T> comparator) Retorna um pedido com base em uma instância de comparador existente. |
10 | <E extends T> List<E> greatestOf(Iterable<E> iterable, int k) Retorna os k maiores elementos do iterável fornecido de acordo com essa ordem, do maior para o menor. |
11 | <E extends T> List<E> greatestOf(Iterator<E> iterator, int k) Retorna os k maiores elementos do iterador fornecido de acordo com essa ordem, do maior para o menor. |
12 | <E extends T> ImmutableList<E> immutableSortedCopy(Iterable<E> elements) Retorna uma lista imutável contendo elementos classificados por esta ordem. |
13 | boolean isOrdered(Iterable<? extends T> iterable) Retorna verdadeiro se cada elemento iterável após o primeiro for maior ou igual ao elemento que o precedeu, de acordo com essa ordem. |
14 | boolean isStrictlyOrdered(Iterable<? extends T> iterable) Retorna verdadeiro se cada elemento iterável após o primeiro for estritamente maior que o elemento que o precedeu, de acordo com esta ordem |
15 | <E extends T> List<E> leastOf(Iterable<E> iterable, int k) Retorna os k menores elementos do iterável fornecido, de acordo com essa ordem, do menor ao maior. |
16 | <E extends T> List<E> leastOf(Iterator<E> elements, int k) Retorna os k menores elementos do iterador fornecido de acordo com essa ordem, do menor ao maior. |
17 | <S extends T> Ordering<Iterable<S>> lexicographical() Retorna uma nova ordem que classifica os iteráveis comparando os elementos correspondentes aos pares até que um resultado diferente de zero seja encontrado; impõe a "ordem do dicionário". |
18 | <E extends T> E max(E a, E b) Retorna o maior dos dois valores de acordo com esta ordem. |
19 | <E extends T> E max(E a, E b, E c, E... rest) Retorna o maior dos valores especificados de acordo com esta ordem. |
20 | <E extends T> E max(Iterable<E> iterable) Retorna o maior dos valores especificados de acordo com esta ordem. |
21 | <E extends T> E max(Iterator<E> iterator) Retorna o maior dos valores especificados de acordo com esta ordem. |
22 | <E extends T> E min(E a, E b) Retorna o menor dos dois valores de acordo com esta ordem. |
23 | <E extends T> E min(E a, E b, E c, E... rest) Retorna o menor dos valores especificados de acordo com esta ordem. |
24 | <E extends T> E min(Iterable<E> iterable) Retorna o menor dos valores especificados de acordo com esta ordem. |
25 | <E extends T> E min(Iterator<E> iterator) Retorna o menor dos valores especificados de acordo com esta ordem. |
26 | static <C extends Comparable> Ordering<C> natural() Retorna uma ordem serializável que usa a ordem natural dos valores. |
27 | <S extends T> Ordering<S> nullsFirst() Retorna uma ordem que trata nulo como menor do que todos os outros valores e usa isso para comparar valores não nulos. |
28 | <S extends T> Ordering<S> nullsLast() Retorna uma ordem que trata o nulo como maior do que todos os outros valores e usa essa ordem para comparar os valores não nulos. |
29 | <F> Ordering<F> onResultOf(Function<F,? extends T> function) Retorna uma nova ordenação em F que ordena os elementos aplicando primeiro uma função a eles e, em seguida, comparando os resultados usando isso. |
30 | <S extends T> Ordering<S> reverse() Retorna o reverso desta ordenação; o Ordering equivalente a Collections.reverseOrder (Comparator). |
31 | <E extends T> List<E> sortedCopy(Iterable<E> elements) Retorna uma lista mutável contendo elementos classificados por esta ordem; use isso apenas quando a lista resultante precisar de modificações adicionais ou pode conter nulo. |
32 | static Ordering<Object> usingToString() Retorna uma ordem que compara objetos pela ordem natural de suas representações de string, conforme retornado por toString (). |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe de pedido
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Ordering;
public class GuavaTester {
public static void main(String args[]) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(5));
numbers.add(new Integer(2));
numbers.add(new Integer(15));
numbers.add(new Integer(51));
numbers.add(new Integer(53));
numbers.add(new Integer(35));
numbers.add(new Integer(45));
numbers.add(new Integer(32));
numbers.add(new Integer(43));
numbers.add(new Integer(16));
Ordering ordering = Ordering.natural();
System.out.println("Input List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering );
System.out.println("Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
System.out.println("Minimum: " + ordering.min(numbers));
System.out.println("Maximum: " + ordering.max(numbers));
Collections.sort(numbers,ordering.reverse());
System.out.println("Reverse: " + numbers);
numbers.add(null);
System.out.println("Null added to Sorted List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering.nullsFirst());
System.out.println("Null first Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
List<String> names = new ArrayList<String>();
names.add("Ram");
names.add("Shyam");
names.add("Mohan");
names.add("Sohan");
names.add("Ramesh");
names.add("Suresh");
names.add("Naresh");
names.add("Mahesh");
names.add(null);
names.add("Vikas");
names.add("Deepak");
System.out.println("Another List: ");
System.out.println(names);
Collections.sort(names,ordering.nullsFirst().reverse());
System.out.println("Null first then reverse sorted list: ");
System.out.println(names);
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
Input List:
[5, 2, 15, 51, 53, 35, 45, 32, 43, 16]
Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
List is sorted: true
Minimum: 2
Maximum: 53
Reverse: [53, 51, 45, 43, 35, 32, 16, 15, 5, 2]
Null added to Sorted List:
[53, 51, 45, 43, 35, 32, 16, 15, 5, 2, null]
Null first Sorted List:
[null, 2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
Another List:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, null, Vikas, Deepak]
Null first then reverse sorted list:
[Vikas, Suresh, Sohan, Shyam, Ramesh, Ram, Naresh, Mohan, Mahesh, Deepak, null]
A classe de objetos fornece funções auxiliares aplicáveis a todos os objetos, como equals, hashCode, etc.
Declaração de Classe
A seguir está a declaração para com.google.common.base.Objects classe -
@GwtCompatible
public final class Objects
extends Object
Métodos de aula
Sr. Não | Método e Descrição |
---|---|
1 | static boolean equal(Object a, Object b) Determina se dois objetos possivelmente nulos são iguais. |
2 | static <T> T firstNonNull(T first, T second) Descontinuada. Use MoreObjects.firstNonNull (T, T) em vez disso. Este método está programado para remoção em junho de 2016. |
3 | static int hashCode(Object... objects) Gera um código hash para vários valores. |
4 | static Objects.ToStringHelper toStringHelper(Class<?> clazz) Descontinuada. Use MoreObjects.toStringHelper (Class) em vez disso. Este método está programado para remoção em junho de 2016 |
5 | static Objects.ToStringHelper toStringHelper(Object self) Descontinuada. Use MoreObjects.toStringHelper (Object) em vez disso. Este método está programado para remoção em junho de 2016. |
6 | static Objects.ToStringHelper toStringHelper(String className) Descontinuada. Use MoreObjects.toStringHelper (String) em vez disso. Este método está programado para remoção em junho de 2016. |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe de objetos
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import com.google.common.base.Objects;
public class GuavaTester {
public static void main(String args[]) {
Student s1 = new Student("Mahesh", "Parashar", 1, "VI");
Student s2 = new Student("Suresh", null, 3, null);
System.out.println(s1.equals(s2));
System.out.println(s1.hashCode());
System.out.println(
Objects.toStringHelper(s1)
.add("Name",s1.getFirstName()+" " + s1.getLastName())
.add("Class", s1.getClassName())
.add("Roll No", s1.getRollNo())
.toString());
}
}
class Student {
private String firstName;
private String lastName;
private int rollNo;
private String className;
public Student(String firstName, String lastName, int rollNo, String className) {
this.firstName = firstName;
this.lastName = lastName;
this.rollNo = rollNo;
this.className = className;
}
@Override
public boolean equals(Object object) {
if(!(object instanceof Student) || object == null) {
return false;
}
Student student = (Student)object;
// no need to handle null here
// Objects.equal("test", "test") == true
// Objects.equal("test", null) == false
// Objects.equal(null, "test") == false
// Objects.equal(null, null) == true
return Objects.equal(firstName, student.firstName) // first name can be null
&& Objects.equal(lastName, student.lastName) // last name can be null
&& Objects.equal(rollNo, student.rollNo)
&& Objects.equal(className, student.className); // class name can be null
}
@Override
public int hashCode() {
//no need to compute hashCode by self
return Objects.hashCode(className,rollNo);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
false
85871
Student{Name=Mahesh Parashar, Class=VI, Roll No=1}
O intervalo representa um intervalo ou uma sequência. É usado para obter um conjunto de números / strings em um intervalo específico.
Declaração de Classe
A seguir está a declaração para com.google.common.collect.Range<C> classe -
@GwtCompatible
public final class Range<C extends Comparable>
extends Object
implements Predicate<C>, Serializable
Métodos
Sr. Não | Método e Descrição |
---|---|
1 | static <C extends Comparable<?>> Range<C> all() Retorna um intervalo que contém todos os valores do tipo C. |
2 | boolean apply(C input)Deprecated. Fornecido apenas para satisfazer a interface Predicate; use contém (C) em vez disso. |
3 | static <C extends Comparable<?>> Range<C> atLeast(C endpoint) Retorna um intervalo que contém todos os valores maiores ou iguais ao ponto final. |
4 | static <C extends Comparable<?>> Range<C> atMost(C endpoint) Retorna um intervalo que contém todos os valores menores ou iguais ao ponto final. |
5 | Range<C> canonical(DiscreteDomain<C> domain) Retorna a forma canônica deste intervalo no domínio fornecido. |
6 | static <C extends Comparable<?>> Range<C> closed(C lower, C upper) Retorna um intervalo que contém todos os valores maiores ou iguais a menores e menores ou iguais a superiores. |
7 | static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper) Retorna um intervalo que contém todos os valores maiores ou iguais a menor e estritamente menor que superior. |
8 | boolean contains(C value) Retorna verdadeiro se o valor estiver dentro dos limites deste intervalo. |
9 | boolean containsAll(Iterable<? extends C> values) Retorna verdadeiro se cada elemento em valores estiver contido neste intervalo. |
10 | static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType) Retorna um intervalo do ponto de extremidade fornecido, que pode ser inclusivo (fechado) ou exclusivo (aberto), sem limite superior. |
11 | static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values) Retorna o intervalo mínimo que contém todos os valores fornecidos. |
12 | boolean encloses(Range<C> other) Retorna verdadeiro se os limites de outro não se estendem fora dos limites deste intervalo. |
13 | boolean equals(Object object) Retorna verdadeiro se o objeto for um intervalo com os mesmos pontos de extremidade e tipos de limite que este intervalo. |
14 | static <C extends Comparable<?>> Range<C> greaterThan(C endpoint) Retorna um intervalo que contém todos os valores estritamente maiores que o ponto final. |
15 | int hashCode() Retorna um código hash para este intervalo. |
16 | boolean hasLowerBound() Retorna verdadeiro se este intervalo tiver um ponto final inferior. |
17 | boolean hasUpperBound() Retorna verdadeiro se este intervalo tiver um ponto final superior. |
18 | Range<C> intersection(Range<C> connectedRange) Retorna o intervalo máximo delimitado por este intervalo e por connectedRange, se tal intervalo existir. |
19 | boolean isConnected(Range<C> other) Retorna verdadeiro se houver um intervalo (possivelmente vazio) que está entre este intervalo e outro. |
20 | boolean isEmpty() Retorna verdadeiro se este intervalo estiver no formato [v..v) ou (v..v]. |
21 | static <C extends Comparable<?>> Range<C> lessThan(C endpoint) Retorna um intervalo que contém todos os valores estritamente menores que o ponto de extremidade. |
22 | BoundType lowerBoundType() Retorna o tipo do limite inferior deste intervalo: BoundType.CLOSED se o intervalo incluir seu ponto de extremidade inferior, BoundType.OPEN se não incluir. |
23 | C lowerEndpoint() Retorna o ponto final inferior deste intervalo. |
24 | static <C extends Comparable<?>> Range<C> open(C lower, C upper) Retorna um intervalo que contém todos os valores estritamente maiores que inferiores e estritamente menores que superiores. |
25 | static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper) Retorna um intervalo que contém todos os valores estritamente maiores que inferior e menor ou igual a superior. |
26 | static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType) Retorna um intervalo que contém qualquer valor de inferior a superior, em que cada ponto de extremidade pode ser inclusivo (fechado) ou exclusivo (aberto). |
27 | static <C extends Comparable<?>> Range<C> singleton(C value) Retorna um intervalo que contém apenas o valor fornecido. |
28 | Range<C> span(Range<C> other) Retorna o intervalo mínimo que inclui este intervalo e outro. |
29 | String toString() Retorna uma representação de string deste intervalo, como "[3..5)" (outros exemplos estão listados na documentação da classe). |
30 | BoundType upperBoundType() Retorna o tipo do limite superior deste intervalo: BoundType.CLOSED se o intervalo incluir seu ponto de extremidade superior, BoundType.OPEN se não incluir. |
31 | C upperEndpoint() Retorna o ponto final superior deste intervalo. |
32 | static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType) Retorna um intervalo sem limite inferior até o endpoint fornecido, que pode ser inclusivo (fechado) ou exclusivo (aberto). |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe de alcance
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import com.google.common.primitives.Ints;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
tester.testRange();
}
private void testRange() {
//create a range [a,b] = { x | a <= x <= b}
Range<Integer> range1 = Range.closed(0, 9);
System.out.print("[0,9] : ");
printRange(range1);
System.out.println("5 is present: " + range1.contains(5));
System.out.println("(1,2,3) is present: " + range1.containsAll(Ints.asList(1, 2, 3)));
System.out.println("Lower Bound: " + range1.lowerEndpoint());
System.out.println("Upper Bound: " + range1.upperEndpoint());
//create a range (a,b) = { x | a < x < b}
Range<Integer> range2 = Range.open(0, 9);
System.out.print("(0,9) : ");
printRange(range2);
//create a range (a,b] = { x | a < x <= b}
Range<Integer> range3 = Range.openClosed(0, 9);
System.out.print("(0,9] : ");
printRange(range3);
//create a range [a,b) = { x | a <= x < b}
Range<Integer> range4 = Range.closedOpen(0, 9);
System.out.print("[0,9) : ");
printRange(range4);
//create an open ended range (9, infinity
Range<Integer> range5 = Range.greaterThan(9);
System.out.println("(9,infinity) : ");
System.out.println("Lower Bound: " + range5.lowerEndpoint());
System.out.println("Upper Bound present: " + range5.hasUpperBound());
Range<Integer> range6 = Range.closed(3, 5);
printRange(range6);
//check a subrange [3,5] in [0,9]
System.out.println("[0,9] encloses [3,5]:" + range1.encloses(range6));
Range<Integer> range7 = Range.closed(9, 20);
printRange(range7);
//check ranges to be connected
System.out.println("[0,9] is connected [9,20]:" + range1.isConnected(range7));
Range<Integer> range8 = Range.closed(5, 15);
//intersection
printRange(range1.intersection(range8));
//span
printRange(range1.span(range8));
}
private void printRange(Range<Integer> range) {
System.out.print("[ ");
for(int grade : ContiguousSet.create(range, DiscreteDomain.integers())) {
System.out.print(grade +" ");
}
System.out.println("]");
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
[0,9] : [ 0 1 2 3 4 5 6 7 8 9 ]
5 is present: true
(1,2,3) is present: true
Lower Bound: 0
Upper Bound: 9
(0,9) : [ 1 2 3 4 5 6 7 8 ]
(0,9] : [ 1 2 3 4 5 6 7 8 9 ]
[0,9) : [ 0 1 2 3 4 5 6 7 8 ]
(9,infinity) :
Lower Bound: 9
Upper Bound present: false
[ 3 4 5 ]
[0,9] encloses [3,5]:true
[ 9 10 11 12 13 14 15 16 17 18 19 20 ]
[0,9] is connected [9,20]:true
[ 5 6 7 8 9 ]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
A classe Throwables fornece métodos utilitários relacionados à interface Throwable.
Declaração de Classe
A seguir está a declaração para com.google.common.base.Throwables classe -
public final class Throwables
extends Object
Métodos de aula
Sr. Não | Método e Descrição |
---|---|
1 | static List<Throwable> getCausalChain(Throwable throwable) Obtém uma cadeia de causa Throwable como uma lista. |
2 | static Throwable getRootCause(Throwable throwable) Retorna a causa mais interna de descartável. |
3 | static String getStackTraceAsString(Throwable throwable) Retorna uma string contendo o resultado de toString (), seguido pelo rastreamento de pilha recursivo completo de descartável. |
4 | static RuntimeException propagate(Throwable throwable) Propaga que pode ser lançado como está se for uma instância de RuntimeException ou Error, ou então, como último recurso, envolve-o em um RuntimeException e se propaga. |
5 | static <X extends Throwable> void propagateIfInstanceOf(Throwable throwable, Class<X> declaredType) Propaga que pode ser jogado exatamente como está, se e somente se for uma instância de declaradoTipo. |
6 | static void propagateIfPossible(Throwable throwable) Propaga que pode ser lançado exatamente como está, se e somente se for uma instância de RuntimeException ou Error. |
7 | static <X extends Throwable> void propagateIfPossible(Throwable throwable, Class<X> declaredType) Propaga o que pode ser jogado exatamente como está, se e somente se for uma instância de RuntimeException, Error ou declaradoType. |
8 | static <X1 extends Throwable,X2 extends Throwable>void propagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) Propaga o lançamento exatamente como está, se e somente se for uma instância de RuntimeException, Error, declaradoTipo1 ou declaradoTipo2. |
Métodos herdados
Esta classe herda métodos da seguinte classe -
- java.lang.Object
Exemplo de classe Throwables
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import java.io.IOException;
import com.google.common.base.Objects;
import com.google.common.base.Throwables;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
try {
tester.showcaseThrowables();
} catch (InvalidInputException e) {
//get the root cause
System.out.println(Throwables.getRootCause(e));
} catch (Exception e) {
//get the stack trace in string format
System.out.println(Throwables.getStackTraceAsString(e));
}
try {
tester.showcaseThrowables1();
} catch (Exception e) {
System.out.println(Throwables.getStackTraceAsString(e));
}
}
public void showcaseThrowables() throws InvalidInputException {
try {
sqrt(-3.0);
} catch (Throwable e) {
//check the type of exception and throw it
Throwables.propagateIfInstanceOf(e, InvalidInputException.class);
Throwables.propagate(e);
}
}
public void showcaseThrowables1() {
try {
int[] data = {1,2,3};
getValue(data, 4);
} catch (Throwable e) {
Throwables.propagateIfInstanceOf(e, IndexOutOfBoundsException.class);
Throwables.propagate(e);
}
}
public double sqrt(double input) throws InvalidInputException {
if(input < 0) throw new InvalidInputException();
return Math.sqrt(input);
}
public double getValue(int[] list, int index) throws IndexOutOfBoundsException {
return list[index];
}
public void dummyIO() throws IOException {
throw new IOException();
}
}
class InvalidInputException extends Exception {
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
InvalidInputException
java.lang.ArrayIndexOutOfBoundsException: 4
at GuavaTester.getValue(GuavaTester.java:52)
at GuavaTester.showcaseThrowables1(GuavaTester.java:38)
at GuavaTester.main(GuavaTester.java:19)
Guava apresenta muitas coleções avançadas com base na experiência dos desenvolvedores em trabalhos de desenvolvimento de aplicativos. Abaixo está uma lista de coleções úteis -
Sr. Não | Nome e descrição da coleção |
---|---|
1 | Multiset Uma extensão para definir a interface para permitir elementos duplicados. |
2 | Multimapa Uma extensão para a interface Map para que suas chaves possam ser mapeadas para vários valores de uma vez. |
3 | BiMap Uma extensão da interface Map para suportar operações inversas. |
4 | Mesa Tabela representa um mapa especial onde duas chaves podem ser especificadas de maneira combinada para se referir a um único valor. |
O Guava fornece um mecanismo de cache baseado em memória muito poderoso por meio de uma interface LoadingCache <K, V>. Os valores são carregados automaticamente no cache e fornece muitos métodos de utilitário úteis para as necessidades de cache.
Declaração de Interface
A seguir está a declaração para com.google.common.cache.LoadingCache<K,V> interface -
@Beta
@GwtCompatible
public interface LoadingCache<K,V>
extends Cache<K,V>, Function<K,V>
Métodos de Interface
Sr. Não | Método e Descrição |
---|---|
1 | V apply(K key) Descontinuada. Fornecido para satisfazer a interface de Função; use get (K) ou getUnchecked (K). |
2 | ConcurrentMap<K,V> asMap() Retorna uma visão das entradas armazenadas neste cache como um mapa thread-safe. |
3 | V get(K key) Retorna o valor associado à chave neste cache, primeiro carregando esse valor, se necessário. |
4 | ImmutableMap<K,V> getAll(Iterable<? extends K> keys) Retorna um mapa dos valores associados às chaves, criando ou recuperando esses valores, se necessário. |
5 | V getUnchecked(K key) Retorna o valor associado à chave neste cache, primeiro carregando esse valor, se necessário. |
6 | void refresh(K key) Carrega um novo valor para a chave, possivelmente de forma assíncrona. |
Exemplo de LoadingCache
Crie o seguinte programa java usando qualquer editor de sua escolha em dizer C:/> Guava.
GuavaTester.java
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class GuavaTester {
public static void main(String args[]) {
//create a cache for employees based on their employee id
LoadingCache<String, Employee> employeeCache =
CacheBuilder.newBuilder()
.maximumSize(100) // maximum 100 records can be cached
.expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
.build(new CacheLoader<String, Employee>() { // build the cacheloader
@Override
public Employee load(String empId) throws Exception {
//make the expensive call
return getFromDatabase(empId);
}
});
try {
//on first invocation, cache will be populated with corresponding
//employee record
System.out.println("Invocation #1");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
//second invocation, data will be returned from cache
System.out.println("Invocation #2");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static Employee getFromDatabase(String empId) {
Employee e1 = new Employee("Mahesh", "Finance", "100");
Employee e2 = new Employee("Rohan", "IT", "103");
Employee e3 = new Employee("Sohan", "Admin", "110");
Map<String, Employee> database = new HashMap<String, Employee>();
database.put("100", e1);
database.put("103", e2);
database.put("110", e3);
System.out.println("Database hit for" + empId);
return database.get(empId);
}
}
class Employee {
String name;
String dept;
String emplD;
public Employee(String name, String dept, String empID) {
this.name = name;
this.dept = dept;
this.emplD = empID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getEmplD() {
return emplD;
}
public void setEmplD(String emplD) {
this.emplD = emplD;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(Employee.class)
.add("Name", name)
.add("Department", dept)
.add("Emp Id", emplD).toString();
}
}
Verifique o resultado
Compile a classe usando javac compilador da seguinte forma -
C:\Guava>javac GuavaTester.java
Agora execute o GuavaTester para ver o resultado.
C:\Guava>java GuavaTester
Veja o resultado.
Invocation #1
Database hit for100
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Database hit for103
Employee{Name=Rohan, Department=IT, Emp Id=103}
Database hit for110
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Invocation #2
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Employee{Name=Rohan, Department=IT, Emp Id=103}
Employee{Name=Sohan, Department=Admin, Emp Id=110}
O Guava apresenta muitos utilitários de string avançados baseados na experiência dos desenvolvedores em trabalhos de desenvolvimento de aplicativos. A seguir está a lista de utilitários úteis baseados em string -
Sr. Não | Nome e descrição do utilitário |
---|---|
1 | Marceneiro Utilitário para unir objetos, string etc. |
2 | Divisor Utilitário para dividir string. |
3 | CharMatcher Utilitário para operações de personagem. |
4 | CaseFormat Utilitário para alterar formatos de string. |
Como os tipos primitivos de Java não podem ser usados para passar genéricos ou em coleções como entrada, o Guava forneceu várias classes Wrapper Utilities para lidar com tipos primitivos como objetos. A seguir está a lista de utilitários de processamento primitivos úteis -
Sr. Não | Nome e descrição do utilitário |
---|---|
1 | Bytes Utilitário para byte primitivo. |
2 | Calção Utilitário para short primitivo. |
3 | Ints Utilitário para int primitivo. |
4 | Longs Utilitário para primitivos longos. |
5 | Floats Utilitário para float primitivo. |
6 | Duplas Utilitário para duplo primitivo. |
7 | Chars Utilitário para caracteres primitivos. |
8 | Booleanos Utilitário para booleano primitivo. |
Guava fornece classes de utilitários relacionados à matemática para lidar com int, long e BigInteger. A seguir está a lista de utilitários úteis -
Sr. Não | Nome e descrição do utilitário |
---|---|
1 | IntMath Utilitário matemático para int. |
2 | LongMath Utilitário de matemática por muito tempo. |
3 | BigIntegerMath Utilitário matemático para BigInteger. |