2017-02-02 1 views
0

Ich habe eine Arraylist, die in eine Liste geht, ich möchte Benutzern erlauben, sie nach männlich und weiblich zu filtern, ich weiß, wie man Listen filtert, ich habe den Filter mit Datum angewendet, aber sowohl männlich als auch weiblich enthalten männlich, Ich bin ziemlich verwirrt, wie ich das angehen soll.Wie filtere ich eine ArrayList mit "Male" und "Female" in Java?

Könnte jemand mich bitte führen, ich habe keinen Code zu zeigen, da ich mich nicht damit abfinden kann - scheint Logik ist nicht mein Ding!

+0

Sie müssen filtere eine Liste von String, oder? –

+0

"Ich habe keinen Code zu zeigen" ... "Ich habe eine Arraylist, die in eine Liste geht" - zeigen Sie uns diesen Code. – FWeigl

Antwort

0

Warum nicht einfach .equals() verwenden, da sie beide "male" enthalten:

import java.util.Arrays; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

class Main { 
    public static void main(String[] args) { 
    List<String> list = new ArrayList<>(Arrays.asList("male","female", "female", "male"));          
    System.out.println("List Before filtering \"male\": " + list); 
    for (Iterator<String> it=list.iterator(); it.hasNext();) { 
     if (!it.next().equals("male")) {//Change to .equals("female") to filter female 
     it.remove(); 
     } 
    } 
    System.out.println("List After filtering \"male\": " + list); 
    } 
} 

Ausgang:

List Before filtering "male": [male, female, female, male] 
List After filtering "male": [male, male] 

Probieren Sie es here!

0

Sie müssen nur equals oder equalsIgnoreCase Funktion verwenden.

Diese Funktionen sind der richtige Weg voll Saiten zu vergleichen.

Also, wenn Sie setzen etwas wie folgt aus:

myString.equals("male") und myString enthält nur die Stringmännlich“, dann ist die einzige Möglichkeit, diese true zurückkehren wird.

wenn Sie == vergleichen verwendet, wird Endup Sie Speicherreferenzen zu vergleichen, das ist genau das, was Sie hier nicht

0

wollen Wenn Sie die Liste der Zeichenfolge filtern müssen - Sie verwenden können Stream zu tun Sie dies.

List<String> strings = 
      Arrays.asList("male", "female", "male", "female","lorem","ipsum"); 

einzigen "männlich" Lassen Sie erhalten String:

List<String> male = strings.stream(). 
      filter("male"::equalsIgnoreCase).collect(Collectors.toList()); 
// will contain ["male","male"] 

Weiblich nur ähnlich sein:

List<String> female = strings.stream(). 
        filter("female"::equalsIgnoreCase).collect(Collectors.toList()); 
// ["female","female","female"] 

Und schließlich sowohl weibliche als auch männliche

List<String> femaleAndMale = strings.stream(). 
     filter(s -> s.equalsIgnoreCase("male") || s.equalsIgnoreCase("female")) 
         .collect(Collectors.toList()); 
Verwandte Themen