【发布时间】:2014-11-06 19:08:21
【问题描述】:
我有两个列表(List1 和 List2),其中包含 Column 类型的对象。 Column 有两个私有变量 - Name 和 Type。 List1 和 List2 的交集由 Column 的名称完成。例如:
List1 = { Column (name = "A", type = "STRING"), Column (name = "B", type = "INT") }
List2 = { Column (name = "A", type = "STRING"), Column (name = "D", type = "INT") }
然后 List1 和 List2 的交集 = { Column (name = "A", type = "STRING") }
如何在不使用双 for 循环 (O(n^2)) 的情况下有效地在 Java 8 中编写代码来检查交集是否有效(如果它无效,那么我想知道列名沿对于冲突的类型,如果它是有效的,那么只返回 True 对我来说就足够了——我不需要交集本身)。一个有效的交集定义如下:通过比较字段名称完成的交集中的列必须具有相同的类型。例如,以下是无效的:
List1 = { Column (name = "A", type = "STRING"), Column (name = "B", type = "INT") }
List2 = { Column (name = "A", type = "INT"), Column (name = "D", type = "INT") }
然后 List1 和 List2 的无效交集 = { Column (name = "A", type = "STRING") } 因为类型不匹配。另一种思考方式是 给定 List1 中的列列表和 List2 中的列列表,我想检查 List1 和 List2 中的列是否具有相同的类型。
第一次尝试:
for (final Column newColumn : newMySQLTableMetaData.getColumns()) {
for (final Column originalColumn : originalMySQLTableMetaData.getColumns()) {
if (newColumn.getName().equals(originalColumn.getName())) {
if (!newColumn.getType().equals(ColumnTypeConverter.toLogicalColumnType(originalColumn.getType()))) {
throw new UploadException("The column types have a mismatch. Original column" +
" named " + originalColumn.getName() + " a type of " + originalColumn.getType().toString() + " " +
"while new column with the same name has a type of " + newColumn.getType().toString());
}
}
}
}
【问题讨论】:
-
你不能使用集合吗? This可以帮助你。
-
不会设置交集只给我一个正确的交集而不列出名称相同但类型不同的列吗?
-
@user503413 该链接上的解决方案是 O(N^2)。
标签: java performance algorithm