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?
Parce que vous utilisez void
comme 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 if
dé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 switch
dé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());
}