Более одного параметра внутри метода equalsIgnoreCase () - PullRequest
0 голосов
/ 05 июня 2018

Я хотел бы очистить свой код, когда я использую метод equals.Мне было интересно, есть ли способ добавить больше параметров в метод equals () одновременно.

В настоящее время это выглядит примерно так:

if (myString.equalsIgnoreCase("option1") || 
    myString.equalsIgnoreCase("option2") || 
    myString.equalsIgnoreCase("option3"))
        doSomething();

Хотя я хочу, чтобы это было такэто:

if (myString.equalsIgnoreCase("option1", "option2", "option3"))
       doSomething();

Могу ли я что-нибудь сделать?Например, переопределить метод equals () или что-то в этом роде?

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Если вы действительно хотите написать что-то свое, я бы, вероятно, сделал что-то вроде этого:

public boolean equalsMultiple (Object myValue, Object [] objects) {
    for (int i = 0; i < objects.length - 1; i++) {
        if (myValue.equals(objects[i]))
            return true;
    }

    return false;
}

и использовал бы Object в качестве параметров на случай, если вы захотите снова использовать этот метод с Objectкроме строки.Тогда вы можете использовать это так:

    Object [] objects = new String [] {"option1","option2",
            "option3"};
    String myString = "option1";
    System.out.println(equalsMultiple(myString,objects));
0 голосов
/ 05 июня 2018

Вы можете использовать Stream.anyMatch():

if (Stream.of("option1", "option2", "option3").anyMatch(myString::equalsIgnoreCase))
0 голосов
/ 05 июня 2018

Мой подход состоит в том, чтобы создать EqualityUtil, а затем создать следующее:

public final class EqualityUtil {

    private EqualityUtil() {}

    public static boolean equalsIgnoreCaseAnyOf(String theString, String... theStrings) {
        return Arrays.stream(theStrings).anyMatch(theString::equalsIgnoreCase);
    }

}

При этом вы можете просто передать строку и N номеров строк на вашу работу.Кроме того, это служебный класс, означающий, что его можно повторно использовать в проекте.

0 голосов
/ 05 июня 2018

Создайте список (или аналогичный) с возможными значениями, затем проверьте, содержит ли он вашу строку

List<String> foo = Arrays.asList("opt1", "opt2", "opt3");
String bar = "OPT1";
if (foo.contains(bar.toLowerCase())) {
    doSomething();
}
...