Как фильтровать ArrayList с помощью "Мужской" и "Женский" на Java?

76
9

У меня есть arraylist, который входит в список, я хочу разрешить пользователям фильтровать его мужчинами и женщинами, я знаю, как фильтровать списки, я применил фильтр с датой, однако, поскольку мужчины и женщины содержат мужчин, я довольно смущен, как подойти к этому.

Мог бы кто-нибудь, пожалуйста, направить меня, у меня нет кода, чтобы показать, поскольку я не могу обдумать его - кажется, что логика не моя вещь!

спросил(а) 2017-02-03T01:14:00+03:00 4 года, 2 месяца назад
1
Решение
115

Если вам нужно отфильтровать список строк, вы можете использовать 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());

ответил(а) 2017-02-03T02:06:00+03:00 4 года, 2 месяца назад
44

Вам просто нужно использовать equals или equalsIgnoreCase.

Эти функции - правильный способ сравнения полных строк.

Поэтому, если вы установите что-то вроде этого:

myString.equals("male") и myString содержат только " мужской " String тогда это единственный возможный способ вернуть true.

если вы сравните с использованием == вы закончите сравнение ссылок на память, это именно то, чего вы не хотите здесь

ответил(а) 2017-02-03T01:31:00+03:00 4 года, 2 месяца назад
44

Почему бы просто не использовать .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]

Попробуйте здесь!

ответил(а) 2017-02-03T01:24:00+03:00 4 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема