2017-06-09 3 views
0

Android Studio - JavaArrayList supprimer, sauf si le caractère contient

Comment puis-je supprimer toutes les entrées d'un ArrayList sauf ceux qui contiennent certains caractères indépendamment de majuscules et minuscules?

String[] numbers = new String[] {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve"}; 

ArrayList arrayList=new ArrayList<>(Arrays.asList(numbers)); 


ArrayList.remove(); 

E.g. si je choisis les lettres "Ne" je voudrais enlever toutes les entrées de l'arraylist excepté les entrées contenant la chaîne de charachter "ne".

Répondre

3

dans Android, pour non java-8

1.) Traverse vous tableau des valeurs

2.) Appliquer toLowerCase() pour convertir la valeur en minuscules et vérifier si elle contient ne, si non, puis supprimer l'élément de la liste

for (String s: numbers) { 
    if (!s.toLowerCase().contains("ne")) { 
     arrayList.remove(s); 
    } 
} 

éléments de la liste

One 
Nine 

Java 8

1.) Ne jamais utiliser Raw type

2.) Appliquer la logique ci-dessus dans filter

ArrayList<String> arrayList=new ArrayList<>(Arrays.asList(numbers)); 
List<String> non_ne = arrayList.stream() 
        .filter(x->!x.toLowerCase().contains("ne")) 
        .collect(Collectors.toList()); 
+0

Ce code a réellement fonctionné pour moi! Génial, merci beaucoup !! :) – LoveCoding

+0

je suis heureux que je pourrais aider, codage heureux –

2

Vous pouvez utiliser un flux

arrayList.stream().filter(x -> x.indexOf("ne") !=-1).collect(Collectors.toList()); 
+0

contiennent certains caractères indépendamment de majuscules et minuscules –

+0

Malheureusement, ce code ne fonctionne pas pour moi puisque Android ne me permet pas d'utiliser l'expression Lambda .. Merci quand même pour votre suggestion! – LoveCoding

+0

si vous voulez 'lambda' alors vous pouvez utiliser [retrolambda] (https://github.com/evant/gradle-retrolambda) –

1
List <String> filtered = arrayList.stream().filter(x -> x.contains("ne")).collect(Collectors.toList()); 
+0

contenir certains caractères indépendamment des majuscules et des minuscules –

+0

Malheureusement, ce code ne fonctionne pas pour moi depuis Android ne me permet pas d'utiliser l'expression Lambda .. Merci quand même pour votre suggestion! – LoveCoding

1

Essayez ceci:

Iterator<String> iter = arrayList.iterator(); 
while (iter.hasNext()) { 
    String s = iter.next(); 
    if (s.toLowerCase().contains("ne")) iter.remove(); 
} 
1

En regardant votre code Je pense que vous êtes probablement mieux de ne pas les ajouter en premier lieu. vous efficacement en disant:

String[] numbers = new String[] {"One", "Two", "Three", ...}; //array 
List list = Arrays.asList(numbers) //create a list 
ArrayList arrayList = new ArrayList<>(list); //create an ArrayList 

//remove those not matching from the ArrayList 

je préférerais l'approche en ajoutant seulement ceux que je dois être dans la liste:

List<String> list = new ArrayList<>(); //a LinkedList may be more appropriate 
for (String number : numbers) { 
    if (number.toLowerCase().contains("ne")) { 
     list.add(number); 
    } 
} 
+0

Ceci est certainement utile dans d'autres cas, mais il ne résout pas vraiment mon problème. Merci quand même pour votre aide! – LoveCoding