Java сравнение двух массивов строк - PullRequest
4 голосов
/ 07 января 2020

У меня есть вопрос о эффективном сравнении двух массивов строк. Я хочу знать, какая строка stArr1 содержит любую строку stArr2. Если да, я хочу напечатать строку, в которой я ее нашел, и индекс строки в stArr1.

То, что я получил до сих пор, - это простой способ сравнения двух строк:

public class Main {

    public static void main(String[] args) {

        String[] stArr1 = {"I am testing", "hi", "bye bye"};
        String[] stArr2 = {"hello", "bye", "test"};

        int matches = 0;

        for (int i = 0; i < stArr1.length; i++) {
            for (int j = 0; j < stArr2.length; j++) {
                if (stArr1[i].contains(stArr2[j])) {
                    System.out.println(stArr1[i] + "found at index " i);
                }
            }
        }
    }
}

Таким образом, вывод должен быть следующим: я проверяю, найденный по индексу 0, пока, пока, по индексу 2.

Кто-нибудь знает более эффективный способ? Я немного попробовал с потоками и уверен, что есть лучшее решение.

1 Ответ

3 голосов
/ 07 января 2020

Вы можете использовать IntStream в сочетании с оператором anyMatch, чтобы выполнить эту задачу. API потоков является универсальным, так что любые практические вычисления могут выполняться с использованием потоков. Но то, что вы можете, не означает, что вы должны. Я все еще предпочитаю итеративный подход, и он намного более читабелен, чем потоковое решение, по крайней мере для меня. Поэтому я рекомендую вам сохранить итеративное решение.

IntStream.range(0, stArr1.length)
    .filter(i -> Arrays.stream(stArr2).anyMatch(s -> stArr1[i].contains(s)))
    .forEach(i -> System.out.println(stArr1[i] + " found at index " + i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...