Java 8 flux / cartes / filtres pour modifier ou éléments de la liste de suppression à la volée

hotmeatballsoup:

Java 8 ici. La recherche d'un moyen (éventuellement écouter à base) « Java 8 » de remplacement et / ou la suppression d' un objet hors d'un List. Voici mon code:

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;
      }
    }
  }
}

Je pense que cela peut être écrit de manière plus efficace / de façon concise et aussi de telle manière à effet de levier Java 8 flux / cartes mais je ne peux pas sembler comprendre comment tout fil ensemble. Des idées?

Samuel Philipp:

Parce que vous utilisez voidcomme type de retour et que vous voulez modifier la liste donnée à l' aide d' un flux ne serait pas la meilleure solution. Vous pouvez simplement utiliser List.replaceAll()et List.removeIf()pour résoudre ce avec une simple ifdéclaration:

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 vous avez plus d' actions que de remplacer et de supprimer , vous pouvez utiliser une switchdéclaration au lieu de if.

Si vous voulez vraiment utiliser Streams Je voudrais aussi séparer les différentes actions. Vous devez également retourner la nouvelle liste dans votre méthode et le réattribuer à la variable que vous passez à cette méthode:

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());
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=168003&siteId=1
conseillé
Classement