l'itération de filtrage et de deux listes à l'aide de java 8
Je veux itérer les deux listes et d'obtenir de nouvelles liste filtrée qui auront des valeurs n'est pas présent dans la deuxième liste. Quelqu'un peut-il aider?
J'ai deux listes, une liste de chaînes de caractères, et l'autre est la liste de MyClass
objets.
List<String> list1;
List<MyClass> list2;
MyClass {
MyClass(String val)
{
this.str = val;
}
String str;
...
...
}
Je veux filtré la liste des chaînes en fonction de -> vérifiez la seconde liste pour les éléments (abc) dont les valeurs ne sont pas présents dans list1
.
List<String> list1 = Arrays.asList("abc", "xyz", "lmn");
List<MyClass> list2 = new ArrayList<MyClass>();
MyClass obj = new MyClass("abc");
list2.add(obj);
obj = new MyClass("xyz");
list2.add(obj);
Maintenant, je veux de nouveau filtré liste -> qui ont de la valeur => "lmn". c'est à dire les valeurs ne sont pas présents dans list2
dont les éléments sont dans list1
.
- Voulez-vous effectuer une itération de ces deux listes en même temps ?
- Bienvenue sur Stackoverflow! Il est bon que vous donnez un peu de code, mais pour obtenir une réponse, vous pouvez également essayer de le décrire, montrer ce que vous avez essayé jusqu'à présent.
- Oui.. je veux itérer les deux listes simultanément. La première est sur-ensemble d'avoir la liste des chaînes et le second est la liste des objets. Chaque objet de cette deuxième liste a un champ de type chaîne avec laquelle je veux comparer d'abord les éléments de la liste. Et tous ces éléments manquants dans la deuxième liste, je veux les prendre en une seule liste.
Vous devez vous connecter pour publier un commentaire.
.filter(e -> !unavailableItems.contains(e))
De le faire avec les cours d'eau est simple et lisible:
stream().noneMatch
pour simplifier un peuEnfin, je dois façon d'atteindre cet objectif de la manière suivante -
Mais c'est également fonctionne comme prévu.
S'il vous plaît laissez-moi savoir combien c'est efficace? et si quelqu'un a d'autres façon de faire la même chose?
Si vous diffusez de la première liste et d'utiliser un filtre basé sur le contient à l'intérieur de la deuxième...
La prochaine question est de savoir quel est le code que vous allez ajouter à la fin de ce streaming opération de traiter les résultats... à vous.
Aussi, liste.contient est assez lent, de sorte que vous serait mieux avec jeux de.
Mais alors, si vous êtes à l'aide de jeux, vous trouverez peut-être quelque faciliter les opérations de gérer cela, comme removeAll
Étant donné que nous ne savons pas comment vous allez l'utiliser, ce n'est pas vraiment possible de conseiller de l'approche à prendre.
Voir ci-dessous, serait la bienvenue anyones commentaires sur le code ci-dessous.
pas de commun entre les deux tableaux:
Commun entre les deux tableaux:
Cela peut fonctionner plus efficace.
si vous avez de la classe avec l'id et que vous souhaitez filtrer par id
line1 : vous mape tous les id
line2: filtrer ce n'est pas exister dans la carte
@DSchmdit réponse a fonctionné pour moi. Je tiens à ajouter sur ce point. Donc, mon exigence était de filtrer un fichier basé sur certaines configurations stockées dans la table.
Le fichier est extrait en premier et recueillies dans la liste de l'otd. - Je recevoir les configurations à partir de la db et l'enregistrer comme une autre liste. C'est ainsi que j'ai fait le travail de filtrage avec des flux
Les détails sont dans la mise en œuvre des prédicats de filtre. Cela s'avère beaucoup plus perfomant sur une itération sur les boucles et le filtrage