Java 8 arroyos / mapas / filtros para modificar o elementos de la lista de eliminación en la marcha

hotmeatballsoup:

Java 8 aquí. Buscando una manera (posiblemente basada en secuencias) "Java 8" de la sustitución y / o eliminación de un objeto fuera de un List. Aquí está mi código:

public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
  int i = 0;
  for (Fizz fizz : fizzes) {
    i++;
    if (fizz.getId() == toModify.getId()) {
      switch(action) {
      case Replace:
        // Here we want to replace 'fizz' in the list
        // with 'toModify' however order/sequence doesn't matter.
        fizzes.remove(i);
        fizzes.add(toModify);
        break;
      case Delete:
      default:
        // Here we just want to remove the Fizz with the matching
        // ID from 'fizzes'.
        fizzes.remove(i);
        break;
      }
    }
  }
}

Creo que esto se puede escribir de manera más eficiente / concisa y también de una manera tal que el apalancamiento de Java 8 arroyos / Mapas pero me parece que no puede encontrar la manera de cable de todo junto. ¿Algunas ideas?

Samuel Philipp:

Puesto que está utilizando voidcomo tipo de retorno y desea modificar la lista dada utilizando una corriente no sería la mejor solución. Usted sólo puede usar List.replaceAll()y List.removeIf()para resolver esto con un simple ifafirmación:

public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
    if (action == Action.Replace) {
        fizzes.replaceAll(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz);
    } else {
        fizzes.removeIf(fizz -> fizz.getId() == toModify.getId());
    }
}

Si usted tiene más acciones que reemplazar y eliminar se puede utilizar una switchdeclaración en lugar de if.

Si realmente desea utilizar corrientes También me separar las diferentes acciones. También hay que devolver la nueva lista en su método y reasignar a la variable se pasa a este método:

public List<Fizz> applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
    if (action == Action.Replace) {
        return fizzes.stream()
                .map(fizz -> fizz.getId() == toModify.getId() ? toModify : fizz)
                .collect(Collectors.toList());
    }
    return fizzes.stream()
            .filter(fizz -> fizz.getId() != toModify.getId())
            .collect(Collectors.toList());
}

Supongo que te gusta

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