如何使用" Male"过滤ArrayList和"女性"在Java?

时间:2017-02-02 22:14:11

标签: java sorting arraylist filter

我有一个arraylist进入列表,我想允许用户按男性和女性过滤它,我知道如何过滤列表,我已经应用了过滤日期,但是男性和女性都包含男性,我很困惑如何处理这个问题。

有人可以指导我,我没有代码可以显示,因为我无法理解它 - 似乎逻辑不是我的事情!

3 个答案:

答案 0 :(得分:0)

为什么不使用.equals(),因为它们都包含"male"

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);
  }
}

输出:

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

试试here!

答案 1 :(得分:0)

您只需使用equalsequalsIgnoreCase功能。

  

此功能是比较完整字符串的正确方法。

所以,如果你设置这样的东西:

myString.equals("male")myString仅包含String男性”,这是唯一可能返回true的方式。

  

如果使用==进行比较,最终会比较内存引用,   这正是你不想要的

答案 2 :(得分:0)

如果您需要过滤字符串列表 - 您可以使用Stream来执行此操作。

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

让我们只获得“男性”String

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

女性只会是相似的:

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

最后是女性和男性

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