Il semble que ce que vous pourriez vouloir faire d'abord est d'indexer les voitures dans votre liste par la vitesse. Une fois que vous avez fait cela, il pourrait être plus facile de faire le reste du traitement que vous recherchez.Multimap s de Guava sont bons pour cela:
ImmutableListMultimap<Integer, Car> speedIndex = Multimaps.index(cars,
new Function<Car, Integer>() {
public Integer apply(Car from) {
return from.getSpeed();
}
});
Maintenant speedIndex
sera un multimap qui vous permet de faire quelque chose comme ceci:
for (Integer speed : speedIndex.keySet()) {
ImmutableList<Car> carsWithSpeed = speedIndex.get(speed);
// Do stuff
}
Cela vous donne des regroupements de toutes les voitures dans la liste originale avoir la même vitesse. Vous pourriez alors faire n'importe quel traitement sur eux que vous vouliez. Vous pourriez vouloir indexer ce groupe de voitures par modèle, en vous donnant des groupes de voitures qui ont à la fois la même vitesse et le même modèle. Vous pouvez ensuite retirer ces voitures de la liste d'origine si vous le souhaitez. Alternativement, si vous ne voulez pas du tout modifier la liste d'origine, mais simplement obtenir une copie de la liste avec un ensemble de voitures retirées, vous pouvez ajouter chaque voiture à Set
, puis obtenir la copie avec ces voitures retirées comme ceci:
Set<Car> carsToRemove = ...;
List<Car> filteredList = Lists.newArrayList(Iterables.filter(cars,
Predicates.not(Predicates.in(carsToRemove))));
Ainsi peut le même modèle ont deux vitesses différentes? – Carlos
Pouvez-vous donner un exemple concret dans votre exemple? Comment cela serait-il filtré: ** Civic 50 | Civic 75 | Camry 50 | Civic 50 | Camry 75 ** –