Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 将每个项目与列表中的其余项目进行比较_List_Scala_Functional Programming_Iteration - Fatal编程技术网

List 将每个项目与列表中的其余项目进行比较

List 将每个项目与列表中的其余项目进行比较,list,scala,functional-programming,iteration,List,Scala,Functional Programming,Iteration,我试图将每个表列与另一个表的列逐一进行比较 这是场景 我有三张这样的桌子 我得到了他们的信息,比如TableRow列表 TableRow(students,INT,10,id) TableRow(students,VARCHAR,200,name) TableRow(students,VARCHAR,100,address) TableRow(department,INT,10,id) TableRow(department,VARCHAR,100,department_name) Tabl

我试图将每个表列与另一个表的列逐一进行比较

这是场景

我有三张这样的桌子

我得到了他们的信息,比如TableRow列表

TableRow(students,INT,10,id)
TableRow(students,VARCHAR,200,name)
TableRow(students,VARCHAR,100,address)

TableRow(department,INT,10,id)
TableRow(department,VARCHAR,100,department_name)

TableRow(teacher,INT,10,id)
TableRow(teacher,INT,10,suvject)
假设我想将每一行与其他表的剩余行进行比较,如下->

TableRow(students,INT,10,id) - TableRow(department,INT,10,id)
TableRow(students,INT,10,id) - TableRow(department,VARCHAR,100,department_name)
TableRow(students,INT,10,id) - TableRow(teacher,INT,10,id)
TableRow(students,INT,10,id) - TableRow(teacher,INT,10,suvject)

TableRow(students,VARCHAR,200,name) - TableRow(department,INT,10,id)
TableRow(students,VARCHAR,200,name) - TableRow(department,VARCHAR,100,department_name)
TableRow(students,VARCHAR,200,name) - TableRow(teacher,INT,10,id)
TableRow(students,VARCHAR,200,name) - TableRow(teacher,INT,10,suvject)

TableRow(students,VARCHAR,100,address) - TableRow(department,INT,10,id)
TableRow(students,VARCHAR,100,address) - TableRow(department,VARCHAR,100,department_name)
TableRow(students,VARCHAR,100,address) - TableRow(teacher,INT,10,id)
TableRow(students,VARCHAR,100,address) - TableRow(teacher,INT,10,suvject)

TableRow(department,INT,10,id) - TableRow(teacher,INT,10,id)
TableRow(department,INT,10,id) - TableRow(teacher,INT,10,subject)

TableRow(department,VARCHAR,100,department_name) - TableRow(teacher,INT,10,id)
TableRow(department,VARCHAR,100,department_name) - TableRow(teacher,INT,10,subject)
因此,我将每个表列与上面的其他表列进行比较

我正在使用这样的代码来比较它,这是可行的,但是有没有更好的方法来实现这一点呢?一个很好的功能性写作方式

 val stack = mutable.Stack[TableRow]().pushAll(tableRows)
    val arrayList = new util.ArrayList[JoinInfo]()

    while (stack.nonEmpty) {
      val currentRow = stack.pop()
      stack.foreach(targetRow => {
        if (!(targetRow.tableName.equals(currentRow.tableName) && targetRow.schema.equals(currentRow.schema))) { //not comparing with current table's column with its other column.
          arrayList.add(compareColumns(currentRow, targetRow))
        }
      })
    }

我会这样写:

(tableRows zip tableRows).filter {
  case(currentRow, targetRow) => !(targetRow.tableName.equals(currentRow.tableName) && targetRow.schema.equals(currentRow.schema))
}

因此,除了使用zip函数避免手动写入双循环外,基本相同。

另外,请阅读。试着在代码审查时问这个问题。whi@user,我不明白你的逻辑,它会如何比较currentRow和TargetRow的每个条目?@user我想你没有正确理解我的问题。它不是关于删除重复,而是将列表中的每个项目与剩余的条件进行比较,因为它不应该考虑比较当前行的表和模式名称是否与另一行匹配。@用户嗯,不是这样的,请看我的第二个块,在那里我解释了实际预期发生的事情。那你就明白了是的。以下是链接:。另外,我认为您需要类似于,在循环中使用
yield
,因为我不确定如何将其用于我的代码。你能详细说明一下吗?