La conversión de matriz de iteración a la función lambda usando Java8

Alex Hombre:

Estoy tratando de convertir a la función Lambda

Hasta ahora soy capaz de convertir el código anterior a la función lambda como se muestra a continuación

Stream.of(acceptedDetails, rejectedDetails)
.filter(list -> !isNull(list) && list.length > 0)
.forEach(new Consumer<Object>() {
    public void accept(Object acceptedOrRejected) {
        String id;
        if(acceptedOrRejected instanceof EmployeeValidationAccepted) {
            id = ((EmployeeValidationAccepted) acceptedOrRejected).getId();
        } else {
            id = ((EmployeeValidationRejected) acceptedOrRejected).getAd().getId();
        }

        if(acceptedOrRejected instanceof EmployeeValidationAccepted) {
            dates1.add(new Integer(id.split("something")[1]));
            Integer empId = Integer.valueOf(id.split("something")[2]);
            empIds1.add(empId);
        } else {
            dates2.add(new Integer(id.split("something")[1]));
            Integer empId = Integer.valueOf(id.split("something")[2]);
            empIds2.add(empId);
        }
    }
});

Pero sigue siendo mi objetivo era evitar la repetición de la misma lógica y también para convertir a la función lambda, todavía en mi función lambda convertida Siento que no es limpio y eficiente.

Esto es sólo por mi aspecto de aprendizaje que estoy haciendo esto mediante la adopción de un fragmento de código existente.

¿Puede alguien por favor dígame cómo puedo improvisar la función Lambda convertido

también:

Un enfoque similar al @roookeee ya publicado, pero tal vez con un poco más concisa sería almacenar las asignaciones de funciones de mapeo utilizando declarado:

Function<String, Integer> extractEmployeeId = empId -> Integer.valueOf(empId.split("-")[2]);
Function<String, BigInteger> extractDate = empId -> new BigInteger(empId.split("-")[1]);

luego proceder con el mapeo como:

Map<Integer, BigInteger> acceptedDetailMapping = Arrays.stream(acceptedDetails)
        .collect(Collectors.toMap(a -> extractEmployeeId.apply(a.getId()),
                a -> extractDate.apply(a.getId())));

Map<Integer, BigInteger> rejectedDetailMapping = Arrays.stream(rejectedDetails)
        .collect(Collectors.toMap(a -> extractEmployeeId.apply(a.getAd().getId()),
                a -> extractDate.apply(a.getAd().getId())));

De aquí en adelante también se puede acceder a la fecha de aceptación o rechazo que corresponde a la employeeIddel empleado también.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=199201&siteId=1
Recomendado
Clasificación