如何在返回带条件的布尔值的方法上使用流

tup*_*kur 5 java list conditional-statements java-stream

我正在使用这种方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

并且我希望能够使用Stream进行更改,我尝试了以下操作,但是我缺少了一些东西:

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

但我遇到一个错误。

Rav*_*ala 8

你可以这样做,

listRows.stream().allMatch(row -> row.nameStr.equals(filter) && row.nameStr.contains(filter));
Run Code Online (Sandbox Code Playgroud)

更新

根据 Holgers 的建议,这可以进一步简化为这样。

listRows.stream().allMatch(row -> row.nameStr.contains(filter));
Run Code Online (Sandbox Code Playgroud)

equals或 的使用contains可能会根据您的上下文而有所不同。

  • @nullpointer 这可能是正确的代码转换,但只是揭示了 OP 条件中的逻辑错误。“equals(filter)”意味着“contains(filter)”,因此如果所有字符串必须相等,则测试“contains(filter)”就没有意义。 (2认同)