Diferencia entre revisiones de «Google Guava»
(→Splitter) |
(→Ver también) |
||
(No se muestran 62 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
[http://code.google.com/p/guava-libraries/ Google Guava] es un proyecto de Google que reúne un conjunto de librerías usadas internamente dentro de Google para sus proyectos que emplean Java. El propósito de la librería es simplificar el código empleado para realizar tareas que son comunes dentro de [[Java]] y que no están soportadas por las librerías estándar, de esta manera busca eliminar código propenso a errores. | [http://code.google.com/p/guava-libraries/ Google Guava] es un proyecto de Google que reúne un conjunto de librerías usadas internamente dentro de Google para sus proyectos que emplean Java. El propósito de la librería es simplificar el código empleado para realizar tareas que son comunes dentro de [[Java]] y que no están soportadas por las librerías estándar, de esta manera busca eliminar código propenso a errores. | ||
− | === Ejemplos | + | == Maven == |
+ | |||
+ | <code xml> | ||
+ | <dependency> | ||
+ | <groupId>com.google.guava</groupId> | ||
+ | <artifactId>guava</artifactId> | ||
+ | <version>r09</version> | ||
+ | </dependency> | ||
+ | </code> | ||
+ | |||
+ | Controlara última versión [http://mvnrepository.com/artifact/com.google.guava/guava aquí]. | ||
+ | |||
+ | == Ejemplos == | ||
===CharMatcher=== | ===CharMatcher=== | ||
− | ==== | + | Determina verdadero o falso para cualquier carácter java, también ofrece métodos básicos de tratamiento de texto. |
+ | |||
+ | ==== and / or ==== | ||
<code java> | <code java> | ||
Línea 16: | Línea 30: | ||
</code> | </code> | ||
− | ==== | + | ==== negate ==== |
<code java> | <code java> | ||
Línea 33: | Línea 47: | ||
CharMatcher charMatcher = CharMatcher.inRange('0', '4').or(CharMatcher.WHITESPACE); | CharMatcher charMatcher = CharMatcher.inRange('0', '4').or(CharMatcher.WHITESPACE); | ||
String output = charMatcher.retainFrom(input); | String output = charMatcher.retainFrom(input); | ||
+ | System.out.println(output); | ||
// Salida: 1 2 3 4 | // Salida: 1 2 3 4 | ||
Línea 39: | Línea 54: | ||
=== Joiner === | === Joiner === | ||
− | ==== | + | Une fragmentos de texto mediante un separador. también ofrece métodos básicos de tratamiento de texto. |
+ | |||
+ | ==== join ==== | ||
<code java> | <code java> | ||
String[] nombres = {"Josefina", "Nacho", "Lali", "Coco"}; | String[] nombres = {"Josefina", "Nacho", "Lali", "Coco"}; | ||
String output = Joiner.on(", ").join(nombres); | String output = Joiner.on(", ").join(nombres); | ||
+ | System.out.println(output); | ||
// Salida: Josefina, Nacho, Lali, Coco | // Salida: Josefina, Nacho, Lali, Coco | ||
Línea 53: | Línea 71: | ||
String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"}; | String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"}; | ||
String output = Joiner.on(", ").skipNulls().join(nombres); | String output = Joiner.on(", ").skipNulls().join(nombres); | ||
+ | System.out.println(output); | ||
// Salida: Josefina, Nacho, Lali, Coco | // Salida: Josefina, Nacho, Lali, Coco | ||
Línea 62: | Línea 81: | ||
String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"}; | String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"}; | ||
String output = Joiner.on(", ").useForNull("n/a").join(nombres); | String output = Joiner.on(", ").useForNull("n/a").join(nombres); | ||
+ | System.out.println(output); | ||
// Salida: n/a, Josefina, n/a, Nacho, n/a, Lali, n/a, Coco | // Salida: n/a, Josefina, n/a, Nacho, n/a, Lali, n/a, Coco | ||
Línea 70: | Línea 90: | ||
<code java> | <code java> | ||
Map<Integer, String> map = newHashMap(); | Map<Integer, String> map = newHashMap(); | ||
− | + | map.put(1, "Josefina"); | |
− | + | map.put(2, "Nacho"); | |
− | + | map.put(3, "Lali"); | |
String output = Joiner.on(", ").withKeyValueSeparator(" -> ").join(map); | String output = Joiner.on(", ").withKeyValueSeparator(" -> ").join(map); | ||
+ | System.out.println(output); | ||
// Salida: 1 -> Josefina, 2 -> Nacho, 3 -> Lali | // Salida: 1 -> Josefina, 2 -> Nacho, 3 -> Lali | ||
Línea 80: | Línea 101: | ||
=== Splitter === | === Splitter === | ||
− | ==== | + | Divide cadenas de texto en subcadenas mediante el reconocimiento de un separador (también conocido como delimitador), este se puede definir mediante un carácter, una cadena literal, una expresión regular, un CharMatcher, o mediante el uso de una longitud fija. |
+ | |||
+ | ==== split ==== | ||
Split retorna una instancia de Iterable en lugar de un Array. | Split retorna una instancia de Iterable en lugar de un Array. | ||
Línea 88: | Línea 111: | ||
Iterable<String> split = Splitter.on("|").split(input); | Iterable<String> split = Splitter.on("|").split(input); | ||
List<String> output = newArrayList(split); | List<String> output = newArrayList(split); | ||
+ | System.out.println(output); | ||
// Salida: [Josefina, Nacho, Lali] | // Salida: [Josefina, Nacho, Lali] | ||
</code> | </code> | ||
+ | |||
+ | ==== fixedLength ==== | ||
+ | |||
+ | <code java> | ||
+ | String input ="Josefina Nacho Lali "; | ||
+ | Iterable<String> splitted = Splitter.fixedLength(10).trimResults().split(input); | ||
+ | List<String> output = newArrayList(splitted); | ||
+ | System.out.println(output); | ||
+ | |||
+ | //Salida: [Josefina, Nacho, Lali] | ||
+ | </code> | ||
+ | |||
+ | ==== onPattern ==== | ||
+ | |||
+ | <code java> | ||
+ | String input ="Josefina Nacho Lali"; | ||
+ | Iterable<String> splitted = | ||
+ | Splitter.onPattern("[a-z&&[aeiou]]").omitEmptyStrings().split(input); | ||
+ | List<String> output = newArrayList(splitted); | ||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: [J, s, f, n, N, ch, L, l] | ||
+ | </code> | ||
+ | |||
+ | === Collection2 === | ||
+ | |||
+ | Proporciona métodos estáticos para trabajar con colecciones. | ||
+ | |||
+ | ==== filter ==== | ||
+ | |||
+ | <code java> | ||
+ | List<String> input = newArrayList("Josefina","Nacho","Lali"); | ||
+ | Collection<String> output = | ||
+ | Collections2.filter(input, new Predicate<String>() { | ||
+ | |||
+ | public boolean apply(String t) { | ||
+ | if (t.contains("i")) { | ||
+ | return true; | ||
+ | } | ||
+ | return false; | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: [Josefina, Lali] | ||
+ | </code> | ||
+ | |||
+ | ==== transform ==== | ||
+ | |||
+ | <code java> | ||
+ | List<String> input = newArrayList("Josefina", "Nacho", "Lali"); | ||
+ | Collection<String> output = | ||
+ | Collections2.transform(input, new Function<String, String>() { | ||
+ | |||
+ | public String apply(String f) { | ||
+ | return f.replaceAll("fina",""); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: [Jose, Nacho, Lali] | ||
+ | </code> | ||
+ | |||
+ | === Constraints === | ||
+ | |||
+ | Restringe la carga de las colecciones medinate limitaciones. | ||
+ | |||
+ | ==== constrainedCollection ==== | ||
+ | |||
+ | <code java> | ||
+ | Constraint<String> debeContenerJoL = new Constraint<String>() { | ||
+ | |||
+ | @Override | ||
+ | public String checkElement(String s) { | ||
+ | checkNotNull(s); | ||
+ | if (!s.contentEquals("JL")) { | ||
+ | throw new IllegalArgumentException("No contiene J ni L"); | ||
+ | } | ||
+ | return s; | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | Collection<String> input = newArrayList("Josefina"); | ||
+ | Collection<String> output = constrainedCollection(input, debeContenerJoL); | ||
+ | output.add("Nacho"); | ||
+ | |||
+ | // Salida: | ||
+ | Exception in thread "main" java.lang.IllegalArgumentException: No contiene J ni L | ||
+ | </code> | ||
+ | |||
+ | <code java> | ||
+ | Collection<String> input = newArrayList("Josefina"); | ||
+ | Collection<String> output = constrainedCollection(input, notNull()); | ||
+ | output.add(null); | ||
+ | |||
+ | // Salida: | ||
+ | Exception in thread "main" java.lang.NullPointerException | ||
+ | </code> | ||
+ | |||
+ | === Ordering === | ||
+ | |||
+ | Comparador con métodos para soportar funciones comunes. | ||
+ | |||
+ | ==== sortedCopy ==== | ||
+ | |||
+ | <code java> | ||
+ | List<String> input = newArrayList("Josefina","Nacho","Lali"); | ||
+ | |||
+ | Ordering<String> ordering = Ordering.from(new Comparator< String>() { | ||
+ | |||
+ | @Override | ||
+ | public int compare(String string1, String string2) { | ||
+ | return Ints.compare(string1.length(), string2.length()); | ||
+ | |||
+ | } | ||
+ | }); | ||
+ | |||
+ | List<String> output = ordering.sortedCopy(input); | ||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: [Lali, Nacho, Josefina] | ||
+ | </code> | ||
+ | |||
+ | |||
+ | === Multimap === | ||
+ | |||
+ | Basicamente es un map en el que se pueden asignar muchos valores a una sola clave. | ||
+ | |||
+ | <code java> | ||
+ | Multimap<Integer, String> output = HashMultimap.create(); | ||
+ | output.put(1, "Josefina"); | ||
+ | output.put(2, "nacho"); | ||
+ | output.put(3, "Lali"); | ||
+ | output.put(1, "Josefina_2"); | ||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: {1=[Josefina, Josefina_2], 2=[Bacho], 3=[lali]} | ||
+ | </code> | ||
+ | |||
+ | ==== ImmutableSetMultimap ==== | ||
+ | |||
+ | ===== inline ===== | ||
+ | <code java> | ||
+ | Multimap<Integer, String> output = | ||
+ | ImmutableSetMultimap.of(1, "Josefina", 2, "Nacho", 3, "Lali", 1, "Josefina_2"); | ||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: {1=[Josefina, Josefina_2], 2=[Nacho], 3=[Lali]} | ||
+ | </code> | ||
+ | |||
+ | ===== builder ===== | ||
+ | |||
+ | <code java> | ||
+ | Multimap<Integer, String> output = | ||
+ | new ImmutableSetMultimap.Builder<Integer, String>() | ||
+ | .put(1, "Josefina") | ||
+ | .put(2, "Nacho") | ||
+ | .put(3, "Lali") | ||
+ | .put(1, "Josefina_2") | ||
+ | .build(); | ||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: {1=[Josefina, Josefina_2], 2=[Bacho], 3=[Lali]} | ||
+ | </code> | ||
+ | |||
+ | === Tables === | ||
+ | |||
+ | Es una colección con columnas filas y valores. Permite el traspaso de una tabla a otra. | ||
+ | |||
+ | <code java> | ||
+ | Table<Integer, String, String> table = HashBasedTable.create(); | ||
+ | table.put(1, "Hija", "Josefina"); | ||
+ | table.put(1, "Sobrino", "Nacho"); | ||
+ | table.put(1, "Pareja", "Lali"); | ||
+ | |||
+ | Table output = Tables.transpose(table); | ||
+ | |||
+ | System.out.println(output); | ||
+ | |||
+ | // Salida: {Sobrino={1=Nacho}, Hija={1=Josefina}, Pareja={1=Lali}} | ||
+ | </code> | ||
+ | |||
+ | === BiMap === | ||
+ | |||
+ | Es un Map que solo permite valores únicos. | ||
+ | |||
+ | <code java> | ||
+ | BiMap<Integer, String> output = HashBiMap.create(); | ||
+ | output.put(1, "Josefina"); | ||
+ | output.put(2, "Lali"); | ||
+ | output.put(3, "Josefina"); //IllegalArgumentException | ||
+ | |||
+ | // Salida: | ||
+ | Exception in thread "main" java.lang.IllegalArgumentException: value already present: Josefina | ||
+ | |||
+ | </code> | ||
+ | |||
+ | === Throwables === | ||
+ | |||
+ | Clase utilitaria que contiene métodos estáticos para el manejo de excepciones. | ||
+ | |||
+ | ==== propagate ==== | ||
+ | |||
+ | En el caso de que la excepción sea del tipo RuntimeException la lanza, de lo contrario crea una RuntimeException con la excepción recibida y la lanza. | ||
+ | |||
+ | <code java> | ||
+ | try { | ||
+ | throw new Exception("Error !!!"); | ||
+ | } catch (Throwable t) { | ||
+ | throw Throwables.propagate(t); | ||
+ | } | ||
+ | |||
+ | // Salida: | ||
+ | Exception in thread "main" java.lang.RuntimeException: java.lang.Exception: Error !!! | ||
+ | at com.google.common.base.Throwables.propagate(Throwables.java:155) | ||
+ | at com.dosideas.guavalibrarydemo.Ejemplo.main(Ejemplo.java:92) | ||
+ | Caused by: java.lang.Exception: Error !!! | ||
+ | at com.dosideas.guavalibrarydemo.Ejemplo.main(Ejemplo.java:90) | ||
+ | </code> | ||
+ | |||
+ | === Files === | ||
+ | |||
+ | Clase con métodos útiles para el manejo de archovs. | ||
+ | |||
+ | ==== readLines ==== | ||
+ | |||
+ | <code java> | ||
+ | ClassLoader cla = App.class.getClassLoader(); | ||
+ | File file = new File(cla.getResource("prueba.txt").getFile()); | ||
+ | List<String> lines = Files.readLines(file, Charsets.UTF_8); | ||
+ | </code> | ||
+ | |||
+ | ==Ver también== | ||
+ | * [[Ejemplo con Google Guava Comparator]] | ||
+ | * [http://code.google.com/p/dosideas-aplicaciones-modelo/source/browse/#svn Descargar con svn de nuestro proyecto en google-code la aplicación demo de Google Guava] | ||
+ | * [http://www.javacodegeeks.com/2011/09/google-guava-libraries-essentials.html Google Guava Libraries Essentials] | ||
+ | * [http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.html Google Guava API] | ||
+ | |||
+ | [[Category:Java]] |
Revisión actual del 14:23 23 may 2012
Google Guava es un proyecto de Google que reúne un conjunto de librerías usadas internamente dentro de Google para sus proyectos que emplean Java. El propósito de la librería es simplificar el código empleado para realizar tareas que son comunes dentro de Java y que no están soportadas por las librerías estándar, de esta manera busca eliminar código propenso a errores.
Contenido
Maven
<dependency>
<groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>r09</version>
</dependency>
Controlara última versión aquí.
Ejemplos
CharMatcher
Determina verdadero o falso para cualquier carácter java, también ofrece métodos básicos de tratamiento de texto.
and / or
String input = "La fecha es : 01/01/2011";
CharMatcher charMatcher = CharMatcher.DIGIT.or(CharMatcher.is('/'));
String output = charMatcher.retainFrom(input);
System.out.println(output);
// Salida : 01/01/2011
negate
String input = "MAYUSCULA minuscula";
CharMatcher charMatcher = CharMatcher.JAVA_LOWER_CASE.or(CharMatcher.WHITESPACE).negate();
String output = charMatcher.retainFrom(input);
System.out.println(output);
// Salida: MAYUSCULA
inRange
String input = "Solo quedan los numeros 1, 2, 3, 4 que son menores a 5 ";
CharMatcher charMatcher = CharMatcher.inRange('0', '4').or(CharMatcher.WHITESPACE);
String output = charMatcher.retainFrom(input);
System.out.println(output);
// Salida: 1 2 3 4
Joiner
Une fragmentos de texto mediante un separador. también ofrece métodos básicos de tratamiento de texto.
join
String[] nombres = {"Josefina", "Nacho", "Lali", "Coco"};
String output = Joiner.on(", ").join(nombres);
System.out.println(output);
// Salida: Josefina, Nacho, Lali, Coco
skipNulls
String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"};
String output = Joiner.on(", ").skipNulls().join(nombres);
System.out.println(output);
// Salida: Josefina, Nacho, Lali, Coco
useForNull
String[] nombres = {null, "Josefina", null, "Nacho", null, "Lali", null, "Coco"};
String output = Joiner.on(", ").useForNull("n/a").join(nombres);
System.out.println(output);
// Salida: n/a, Josefina, n/a, Nacho, n/a, Lali, n/a, Coco
withKeyValueSeparator
Map<Integer, String> map = newHashMap();
map.put(1, "Josefina");
map.put(2, "Nacho");
map.put(3, "Lali");
String output = Joiner.on(", ").withKeyValueSeparator(" -> ").join(map);
System.out.println(output);
// Salida: 1 -> Josefina, 2 -> Nacho, 3 -> Lali
Splitter
Divide cadenas de texto en subcadenas mediante el reconocimiento de un separador (también conocido como delimitador), este se puede definir mediante un carácter, una cadena literal, una expresión regular, un CharMatcher, o mediante el uso de una longitud fija.
split
Split retorna una instancia de Iterable en lugar de un Array.
String input = "Josefina|Nacho|Lali";
Iterable<String> split = Splitter.on("|").split(input);
List<String> output = newArrayList(split);
System.out.println(output);
// Salida: [Josefina, Nacho, Lali]
fixedLength
String input ="Josefina Nacho Lali ";
Iterable<String> splitted = Splitter.fixedLength(10).trimResults().split(input);
List<String> output = newArrayList(splitted);
System.out.println(output);
//Salida: [Josefina, Nacho, Lali]
onPattern
String input ="Josefina Nacho Lali";
Iterable<String> splitted =
Splitter.onPattern("[a-z&&[aeiou]]").omitEmptyStrings().split(input);
List<String> output = newArrayList(splitted); System.out.println(output);
// Salida: [J, s, f, n, N, ch, L, l]
Collection2
Proporciona métodos estáticos para trabajar con colecciones.
filter
List<String> input = newArrayList("Josefina","Nacho","Lali");
Collection<String> output =
Collections2.filter(input, new Predicate<String>() {
public boolean apply(String t) { if (t.contains("i")) { return true; } return false; } });
System.out.println(output);
// Salida: [Josefina, Lali]
transform
List<String> input = newArrayList("Josefina", "Nacho", "Lali");
Collection<String> output =
Collections2.transform(input, new Function<String, String>() {
public String apply(String f) { return f.replaceAll("fina",""); } });
System.out.println(output);
// Salida: [Jose, Nacho, Lali]
Constraints
Restringe la carga de las colecciones medinate limitaciones.
constrainedCollection
Constraint<String> debeContenerJoL = new Constraint<String>() {
@Override public String checkElement(String s) { checkNotNull(s); if (!s.contentEquals("JL")) { throw new IllegalArgumentException("No contiene J ni L"); } return s; }
};
Collection<String> input = newArrayList("Josefina"); Collection<String> output = constrainedCollection(input, debeContenerJoL); output.add("Nacho");
// Salida: Exception in thread "main" java.lang.IllegalArgumentException: No contiene J ni L
Collection<String> input = newArrayList("Josefina");
Collection<String> output = constrainedCollection(input, notNull());
output.add(null);
// Salida: Exception in thread "main" java.lang.NullPointerException
Ordering
Comparador con métodos para soportar funciones comunes.
sortedCopy
List<String> input = newArrayList("Josefina","Nacho","Lali");
Ordering<String> ordering = Ordering.from(new Comparator< String>() {
@Override public int compare(String string1, String string2) { return Ints.compare(string1.length(), string2.length()); }
});
List<String> output = ordering.sortedCopy(input); System.out.println(output);
// Salida: [Lali, Nacho, Josefina]
Multimap
Basicamente es un map en el que se pueden asignar muchos valores a una sola clave.
Multimap<Integer, String> output = HashMultimap.create();
output.put(1, "Josefina"); output.put(2, "nacho"); output.put(3, "Lali"); output.put(1, "Josefina_2");
System.out.println(output);
// Salida: {1=[Josefina, Josefina_2], 2=[Bacho], 3=[lali]}
ImmutableSetMultimap
inline
Multimap<Integer, String> output =
ImmutableSetMultimap.of(1, "Josefina", 2, "Nacho", 3, "Lali", 1, "Josefina_2");
System.out.println(output);
// Salida: {1=[Josefina, Josefina_2], 2=[Nacho], 3=[Lali]}
builder
Multimap<Integer, String> output =
new ImmutableSetMultimap.Builder<Integer, String>() .put(1, "Josefina") .put(2, "Nacho") .put(3, "Lali") .put(1, "Josefina_2") .build();
System.out.println(output);
// Salida: {1=[Josefina, Josefina_2], 2=[Bacho], 3=[Lali]}
Tables
Es una colección con columnas filas y valores. Permite el traspaso de una tabla a otra.
Table<Integer, String, String> table = HashBasedTable.create();
table.put(1, "Hija", "Josefina");
table.put(1, "Sobrino", "Nacho");
table.put(1, "Pareja", "Lali");
Table output = Tables.transpose(table);
System.out.println(output);
// Salida: {Sobrino={1=Nacho}, Hija={1=Josefina}, Pareja={1=Lali}}
BiMap
Es un Map que solo permite valores únicos.
BiMap<Integer, String> output = HashBiMap.create();
output.put(1, "Josefina");
output.put(2, "Lali");
output.put(3, "Josefina"); //IllegalArgumentException
// Salida: Exception in thread "main" java.lang.IllegalArgumentException: value already present: Josefina
Throwables
Clase utilitaria que contiene métodos estáticos para el manejo de excepciones.
propagate
En el caso de que la excepción sea del tipo RuntimeException la lanza, de lo contrario crea una RuntimeException con la excepción recibida y la lanza.
try { throw new Exception("Error !!!"); } catch (Throwable t) { throw Throwables.propagate(t); }
// Salida: Exception in thread "main" java.lang.RuntimeException: java.lang.Exception: Error !!! at com.google.common.base.Throwables.propagate(Throwables.java:155) at com.dosideas.guavalibrarydemo.Ejemplo.main(Ejemplo.java:92) Caused by: java.lang.Exception: Error !!! at com.dosideas.guavalibrarydemo.Ejemplo.main(Ejemplo.java:90)
Files
Clase con métodos útiles para el manejo de archovs.
readLines
ClassLoader cla = App.class.getClassLoader();
File file = new File(cla.getResource("prueba.txt").getFile());
List<String> lines = Files.readLines(file, Charsets.UTF_8);