Chciałbym oczyścić mój kod, gdy używam metody równej. Zastanawiałem się, czy jest jakiś sposób, aby dodać więcej parametrów wewnątrz metody równej () naraz.

Obecnie wygląda na coś takiego:

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

Chociaż tak chcę to:

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

Czy jest coś, co mogę zrobić? Jak nadpisanie metody równej () lub coś takiego?

0
Rick Mkl 5 czerwiec 2018, 00:51

4 odpowiedzi

Najlepsza odpowiedź

Możesz użyć Stream.anyMatch():

if (Stream.of("option1", "option2", "option3").anyMatch(myString::equalsIgnoreCase))
1
shmosel 4 czerwiec 2018, 21:57

Utwórz listę (lub podobną) z możliwych wartości, a następnie sprawdź, czy zawiera twój ciąg

List<String> foo = Arrays.asList("opt1", "opt2", "opt3");
String bar = "OPT1";
if (foo.contains(bar.toLowerCase())) {
    doSomething();
}
0
baao 4 czerwiec 2018, 21:55

Jeśli naprawdę chciałbyś napisać coś własnego, prawdopodobnie zrobiłbym coś takiego:

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

I użyj obiektu jako parametrów w przypadku, gdybyś chciał ponownie użyć tej metody za pomocą obiektu innego niż ciąg. Wtedy możesz go użyć w ten sposób:

    Object [] objects = new String [] {"option1","option2",
            "option3"};
    String myString = "option1";
    System.out.println(equalsMultiple(myString,objects));
0
Dragoş Bercea 4 czerwiec 2018, 22:01

Moim podejściem będzie utworzyć EqualityUtil, a następnie utworzyć wtedy:

public final class EqualityUtil {

    private EqualityUtil() {}

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

}

Dzięki temu możesz po prostu przejść w ciągu i n liczb ciągów do pracy. Plus jest to klasa użyteczna, co oznacza, że można go ponownie wykorzystać wokół projektu.

0
akortex91 4 czerwiec 2018, 22:10