Как использовать поток в методе, который возвращает логическое значение с условием - PullRequest
0 голосов
/ 19 февраля 2019

Я использую этот метод:

public boolean checkRowsFilterNameBy(String filter){
    waitForElmContainsText(searchButton, "Search");
    List<AuditRow> listRows = auditTable.getTable();
    for(AuditRow row : listRows){
        if(!row.nameStr.equals(filter)||!row.nameStr.contains(filter))
            return false;
    }
    return true;
}

, и я хочу иметь возможность изменить его с помощью Stream, я пробовал следующее, но мне чего-то не хватает:

listRows.stream().forEach(auditRow -> {
           if(auditRow.actionStr.equals(filter))return true;} else return false;);

но я получаю ошибку.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

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

boolean result = (listRows.stream().filter(row -> row.nameStr.equals(filter) && row.nameStr.contains(filter)).count() == 0);
0 голосов
/ 19 февраля 2019

Избавляемся от всех отрицаний, используя закон Деморгана, так что

(!a || !b) => !(a && b)

вы можете использовать allMatch как:

return listRows.stream()
        .allMatch(row -> row.nameStr.equals(filter)
                && row.nameStr.contains(filter));

, который имеет аналогичную версию, используя noneMatch:

return listRows.stream()
        .noneMatch(row -> (!row.nameStr.equals(filter) 
                || !row.nameStr.contains(filter)));

Логическим улучшением в вашем коде может быть просто проверка на contains, что также подразумевает equal, это будет сокращено до:

return listRows.stream().allMatch(row -> row.nameStr.contains(filter));
0 голосов
/ 19 февраля 2019

Вы можете сделать это так,

listRows.stream().allMatch(row -> row.nameStr.equals(filter) && row.nameStr.contains(filter));

Обновление

Согласно предложению Хольгерса, это может быть еще более упрощено.

listRows.stream().allMatch(row -> row.nameStr.contains(filter));

Использование equals или contains может варьироваться в зависимости от вашего контекста.

...