Met*_*ata 0 java scala short-circuiting
我正在尝试将 java 程序的模块转换为 Scala。到目前为止,我已经能够在我转换的每个模块中应用 Scala 的函数式编程范式及其语法。但是我遇到了一种可以进行一些验证、使用continue并最终yield输出的方法。下面是Java中的代码:
public boolean checkColumn(String server, String database, String schema, String table, String column) {
boolean bServer, bDatabase, bSchema, bTable, bColumn, bRet = false;
for (int i = 0; i < columns.length; i++) {
if ((server == null) || (server.length() == 0)) {
bServer = true;
} else {
bServer = columns[i][0].equalsIgnoreCase(server);
}
if (!bServer) continue;
if ((database == null) || (database.length() == 0)) {
bDatabase = true;
} else {
bDatabase = columns[i][1].equalsIgnoreCase(database);
}
if (!bDatabase) continue;
if ((schema == null) || (schema.length() == 0)) {
bSchema = true;
} else {
bSchema = columns[i][2].equalsIgnoreCase(schema);
}
if (!bSchema) continue;
bTable = columns[i][3].equalsIgnoreCase(table);
if (!bTable) continue;
bColumn = columns[i][4].equalsIgnoreCase(column);
if (!bColumn) continue;
bRet = true;
break;
}
return bRet;
}
Run Code Online (Sandbox Code Playgroud)
虽然我知道continue在 Scala 的最新版本中没有,但我能够理解如何在 Scala 中编写相同的代码。我尝试构建一个 for 循环,如下所示:
val finalReturn = for {i <- 0 until columns.length
} yield bRet
Run Code Online (Sandbox Code Playgroud)
但是想不出一种方法来形成所有 if 条件 &continue在 for 循环内的逻辑。谁能告诉我如何在 Scala 中编写相同的代码?
您正在检查(至少)其中一个columns匹配所有测试。这是exists操作:
def checkColumn(server: String, database: String, schema: String, table: String, column: String) = {
columns.exists { col =>
(server.isEmpty || col(0).equalsIgnoreCase(server)) &&
(database.isEmpty || col(1).equalsIgnoreCase(database)) &&
(schema.isEmpty || col(2).equalsIgnoreCase(schema)) &&
col(3).equalsIgnoreCase(table) &&
col(4).equalsIgnoreCase(column)
}
Run Code Online (Sandbox Code Playgroud)
这将依次检查每个元素,直到其中一列通过所有测试(将返回true)或列表用尽,这将返回false。
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |