我有一个arraylist进入列表,我想允许用户按男性和女性过滤它,我知道如何过滤列表,我已经应用了过滤日期,但是男性和女性都包含男性,我很困惑如何处理这个问题。
有人可以指导我,我没有代码可以显示,因为我无法理解它 - 似乎逻辑不是我的事情!
答案 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)
您只需使用equals
或equalsIgnoreCase
功能。
此功能是比较完整字符串的正确方法。
所以,如果你设置这样的东西:
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());