Páginas

jueves, 25 de agosto de 2022

Funciones útiles en una linea con JAVA 8

Tenemos nueva receta, esta vez de Java 8!!!!!






PROBLEMA:

Con la publicación de java8 muchos métodos que antes nos ocupaban muchas lineas se pueden hacer ahora en una, sobre todo aquellas que implican jugar con mapas, colecciones y fechas. Así que en esta receta iré subiendo las típicas funciones que todos tenemos en nuestro código y que son ahora mucho más "fáciles" de hacer.

Aún así, algunas de estas funciones se pueden hacer sin java8 usando alguna librería, cuando así sea pondré la alternativa para aquellos que aún no podéis usan el nuevo java en sus proyectos.

SOLUCIÓN:

Sumar los elementos de una lista:

   
final List<Integer> lista = Arrays.asList(new Integer[] { 1, 2, 3, 4 });

// con java8
final int suma = lista.stream().mapToInt(a -> a).sum();

Hacer la media de los elementos de una lista:1

   
final List<Integer> lista = Arrays.asList(new Integer[] { 1, 2, 3, 4 });

// con java8
final double media = lista.stream().mapToDouble(a -> a).average().getAsDouble();

Obtener una lista sólo los elementos que cumplan una condicion:

   
final List<Integer> lista = Arrays.asList(new Integer[] { 1, 2, 3, 4 });

// con java8
final List<Integer> listaMayoresQueDosJava8 = lista.stream().filter(a -> a > 2).collect(Collectors.toList());

// sin necesidad java 8 pero con guava
final Collection<Integer> listaMayoresQueDosGuava = Collections2.filter(lista, new Predicate<Integer>() {
    @Override
    public boolean apply(final Integer input) {
        return input > 2;
    }
});

Crear una lista con una propiedad de los elementos de otra lista:

   
// supongo que tengo la tipica clase Tienda con id y nombre
final List<Tienda> listaTiendas = new ArrayList<Tienda>() {
            {
                add(new Tienda(1, "Tienda 1"));
                add(new Tienda(2, "Tienda 2"));
                add(new Tienda(3, "Tienda 3"));
            }
        };

// con java8
final List<Integer> listaIdsJava8 = listaTiendas.stream().map(a -> a.getId()).collect(Collectors.toList());

// sin necesidad java 8 pero con guava
final Collection<Integer> listaIdsGuava = Collections2.transform(listaTiendas, new Function<Tienda, Integer>() {
    @Override
    public Integer apply(final Tienda input) {
        return input.getId();
    }
});

Calcular los días entre dos fechas:

   
// con java8
import java.time.LocalDate;
import java.time.Period;
final LocalDate hoy = LocalDate.now();
final LocalDate finAno = LocalDate.now().with(TemporalAdjusters.lastDayOfYear());
final int diasHastaFinAnoJava8 = Period.between(hoy, finAno).getDays();

// sin necesidad java 8 pero con joda-time
import org.joda.time.Days;
import org.joda.time.LocalDate;
final LocalDate hoy = new LocalDate();
final LocalDate finAno = hoy.monthOfYear().withMaximumValue().dayOfMonth().withMaximumValue();
final int diasHastaFinAnoJoda = Days.daysBetween(hoy, finAno).getDays();




Recuerda que si te gusta nuestro blog puedes seguirnos en facebook dando en compartir y puedes además subscribirte por correo, todo para que estés al día de las últimas novedades del blog. Si quieres proponer un tema ponte en contacto con nosotros con el enlace a contacto o poniendo un comentario

Espero que te guste!

No hay comentarios:

Publicar un comentario