【问题标题】:How to filter an ArrayList with "Male" and "Female" in Java?如何在 Java 中过滤带有“男性”和“女性”的 ArrayList?
【发布时间】:2017-06-20 04:18:04
【问题描述】:

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

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

【问题讨论】:

  • 你需要过滤一个String列表,对吧?
  • “我没有要显示的代码”...“我有一个进入列表的数组列表” - 向我们展示该代码。

标签: java sorting arraylist filter


【解决方案1】:

如果您需要过滤字符串列表 - 您可以使用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());

【讨论】:

    【解决方案2】:

    为什么不直接使用.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!

    【讨论】:

      【解决方案3】:

      您只需要使用equalsequalsIgnoreCase 函数即可。

      此函数是比较完整字符串的正确方法。

      所以如果你这样设置:

      myString.equals("male")myString 仅包含 String "ma​​le" 那么这是返回 true 的唯一可能方式。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 2017-10-08
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        相关资源
        最近更新 更多