Пересечение с ArrayList в Java 8 - PullRequest
1 голос
/ 04 февраля 2020

Итак, что для перекрестного сопоставления данных в списке классов Generi c, где необходимо проверить соответствие Имен с Фамилиями и, если есть совпадение, либо вернуть данные, либо вернуть логическое значение. вот что я придумал

list.stream().forEach(x -> {
    boolean test = list2.stream()
            .anyMatch(toet -> toet.getLastName() == x.getStuName());
    if (test) {
        test2.setBool(test);
    }
});
System.out.println("Match > " + test2.getBool());

Это возвращает TRUE, потому что я использую GETTER AND SETTER, чтобы вернуть логическое выражение из лямбда-выражения, установив логическое значение.

Так что я ищу самое простое лямбда-выражение, чтобы сделать это? пожалуйста, есть ли кто-нибудь там.

1 Ответ

0 голосов
/ 04 февраля 2020

Вы можете использовать фильтр:

  long count = list.stream().filter(e -> e.equals(someString)).count();

Но это делается в O(n). Есть лучший способ ... Вместо обычного списка, используйте Set, поэтому конвертируйте List в Set и проверьте, существует ли он:

Set set = new HashSet(list);

if (set.contains(someString)) return true;

Если вы конвертировали список один раз до этого любая проверка и просто использование этого набора позже, проверка, содержится ли он, выполняется в O(1). Зависит от того, как вы получаете список на первом месте? Есть ли у вас список в начале программы? Затем составьте список c в классе. Вы получите это позже? Как часто это меняется? Тем не менее, даже если это так, убедитесь, что его обновление отделено, и при этом у вас все равно будет O(1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...