Usuario:Iho jose/diccionario/Z/Zona de estudios/4
Colecciones de datos y clases genéricas[editar]
Clases genéricas
- Me proveen flexibilidad en el los tipos de dato y código.
- Me va a permitir tener un mejor control de errores en compilación y no en ejecución.
- Me provee una manera limpia y fácil en el momento de escribir código.
- Me reduce la necesidad de hacer casting entre tipos de dato.
- Son muy utilizadas en la API de JAVA.
Nomenclatura
- T: Tipo de dato
- V: Valor
- S, U: Otros tipos de dato
- K: Llave.
public class Cache <T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}
NOTA: Collection
(interface) es diferente a Collections
(Clase)
- No hay implementaciones directas de
Collection
, está enjava.util
. - Está en
java.util
que contiene métodos estáticos para la colección de datos.
NOTA: Collección es un objeto simple que administra un grupo de objetos. Los objetos en una colección son llamados elementos. Los tipos de colecciones están alojados todos en el paquete java.util, y son requeridos para implementarlo.
Set[editar]
NOTA: Set
es una interface de lista de datos que no están repetidos.
Set<Perro> lp = new HashSet<>();
NOTA: SortedSet
es un colección ordenada de elementos, una lista de datos ordenados por su forma natural.
List[editar]
Es una lista de elementos que se van guardando conforme lleguen.
NOTA: LinkedList
doblemente enlazadas, manejan que los indices son nodos, son muy costosas para la consulta pero son mucho más rápidas en la inserción de información a comparación del ArrayList
.
Interface List[editar]
Es una interface
que define lista genérica.
Interface Set
[editar]
- Los eementos Set no tienen index.
- No está permitido duplicar datos en estos documentos.
Map
interface[editar]
- Guarda datos asociados a una llave.
- La llave no se repite pero el valor en las llaves pueden ser los mismos.
Queque[editar]
- Para adicionar un elementos con FIFO las operaciones (métodos) son,
add(e)
yremove()
. - Para adicionar un elementos con LIFO operaciones (métodos) son,
push(e)
ypop()
. - También existen los métodos
peek()
ypull()
obtiene el elemento de la cabeza de la pila y la borra ypeek()
hace lo mismo pero no la borra.
Comparator[editar]
- Usando interfaz comparator.
Contrucción de Lambda e interfaces funcionales[editar]
Paquete java.util.function
[editar]
Predicate
son expresiones que me van a retornar siempre un booleano.Consumer
es una expresión que me va a mejorar una operación y no devuelve nada.Function
Transforma de un objeto en otro.Supplier
Provee una instancia de T.- Variaciones primitivas
- Variaciones binarias.
public interface Predicate<T> {
public boolean test(T t);
}
Predicate<Perro> perros = t -> t.getState().equals(State.MA);
System.out.println("\n== Perros - Stream");
tList.stream().filter(perros).forEach(t -> t.printSummary());
System.out.println("\n == Perros - Llamadas de Métodos");
for (Perro t:tList) {
if (Perro.test(t)) {
t.printSummary();
}
}
Consumer
[editar]
public interface Comsumer<T> {
public void accepts(T t);
}
Suplier
[editar]
Retorna un dato de tipo genérico y no recibe datos.
public interfaz Suplier<T> {
public T get();
}
Interfaces primitivas[editar]
Me permiten retornar un dato primitivo y nos recibe como parámetro un primitivo.
public interface ToDoubleFunction<T> {
public double applyAsDouble(T t);
}
ToDoubleFunction<SaleTxn> discountFunction = t -> t.getTransactionTotal() * t.getDiscountRate();
System.out.println(discountFunction.applyDuble(first));
public interface DoubleFunction<R> {
public R apply(double value);
}
DoubleFunction<String> calc = t -> String.valueOf(t * 3);
String result = calc.apply(20);
System.out.println("New value is: " + result);
Datos de tipo Binarios[editar]
public interface BiPredicate<T, U> {
public boolean test(T t, U u);
}
public interface UnaryOperator<T> extends Function<T, T> {
@Override
public T apply(T t);
}
Wilcard Generic Review[editar]
Se utilizan para generar relación a los objetos genéricos y a los datos concretos.
? super T
? extends T
Notas[editar]
public static void main(String... args) {
List<String> lista = new ArrayList<>();
lista.add("1234234");
lista.add("2334");
lista.add("67567");
lista.add("3534546");
lista.add("3432435435");
lista.add("324545345");
lista.add("32452543");
Consumer<String> function = s -> System.out.println(s);
lista.stream().sorted(Comparator.comparingDouble(t -> Double.parseDouble(t.substring(0, 1)))).forEach(function);
}
public static void main(String... args) {
List<String> lista = new ArrayList<>();
lista.add("1234234");
lista.add("2334");
lista.add("67567");
lista.add("3534546");
lista.add("3432435435");
lista.add("324545345");
lista.add("32452543");
List<String> a = lista.stream().collect(Collectors.toList());
System.out.println(a);
}
public static void main(String... args) {
Stream.of("Hoy", "Ayer", "MArtes", "Tadeo", "Tomas").filter(s -> s.startsWith("T")).forEach(s -> System.out.println("Nombre: " + s));
}
Date and Time[editar]
LocalDate
: Fecha.LocalTime
: Hora.LocalDateTime
: Fecha y hora.ZoneId
: Zona Horaria. "America/Bogota";OffsetDateTime
: Zona a Zona.
public static void main(String... args) {
LocalDateTime meeting;
meeting = LocalDateTime.of(2015, MARCH, 21, 13, 30);
LocalDate fff;
fff = LocalDate.of(2015, MARCH, 21);
LocalTime ttt;
ttt = LocalTime.of(21, 42);
}