Usuario:Iho jose/diccionario/Z/Zona de estudios/4

De Wikipedia, la enciclopedia libre

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á en java.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) y remove().
  • Para adicionar un elementos con LIFO operaciones (métodos) son, push(e) y pop().
  • También existen los métodos peek() y pull() obtiene el elemento de la cabeza de la pila y la borra y peek() 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);
}