gpt4 book ai didi

java - 检查两个列表的交集是否有效,不需要返回交集本身

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:45:26 25 4
gpt4 key购买 nike

我有两个包含 Column 类型对象的列表(List1 和 List2)。列有两个私有(private)变量——名称和类型。 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());
}
}
}
}

最佳答案

list1 中的所有元素放入 HashMap 索引中,索引为 name。抛出第二个列表并查看是否有来自第一个列表的匹配列(每个元素 O(1))。如果是,请检查冲突。

private List<String> conflictList = new ArrayList<String>();

private final Map<String, Column> map = new HashMap<>();
for (Column c1: list1) map.put(c1.name, c1);
for (Column c2: list2) {
Column c1 = map.put(c2.name, c2);
if (c1==null) continue;
if (c1.type.equals(c2.type)) continue;
conflictList.add(c1); // or add the name only or both elements or whatever
}

如果 conflictList 为空,那么您就赢了。如果您不关心细节,请提前返回而不是处理剩余的元素。

关于java - 检查两个列表的交集是否有效,不需要返回交集本身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com