Vous pouvez utiliser Iterables.filter
, ce qui va certainement maintenir la commande.
Notez que par la construction d'une nouvelle liste, vous serez en copie les éléments (juste les références, bien sûr) - afin de ne pas être une vue en direct sur la liste d'origine. Création d'une vue serait assez difficile d'envisager cette situation:
Predicate<StringBuilder> predicate =
/* predicate returning whether the builder is empty */
List<StringBuilder> builders = Lists.newArrayList();
List<StringBuilder> view = Lists.filter(builders, predicate);
for (int i = 0; i < 10000; i++) {
builders.add(new StringBuilder());
}
builders.get(8000).append("bar");
StringBuilder firstNonEmpty = view.get(0);
Qui aurait pour itérer sur l'ensemble de la liste originale, en appliquant le filtre à tout. Je suppose qu'il pourrait exiger que le prédicat correspondant n'a pas changé au cours de la durée de vie de la vue, mais qui n'est pas entièrement satisfaisant.
(C'est juste deviner, vous l'esprit. Peut-être l'un des responsables de Goyave sera puce avec la véritable raison :)