gpt4 book ai didi

java - Collection.sort 未返回预期结果

转载 作者:行者123 更新时间:2023-11-29 04:05:24 26 4
gpt4 key购买 nike

我正在尝试用 Java 确定 MySQL 数据库中列的顺序。我有表的创建语句 (this.create) 和列的名称 (column.getName())。然后我在 create 语句中找到列名的索引。我将这些值分配给一个列表,然后使用 Collectio.sort() 对它们进行排序。然后使用它来确定列的顺序。唯一的问题是我没有得到预期的结果。这是我的代码:

 public void orderColumns() {

List<Integer> cols = new ArrayList();
for ( column column : columns ) {

cols.add( this.create.indexOf( "`" + column.getName() + "`"));
}

Collections.sort( cols );

for ( column column : columns ) {
for ( int i = 0; i < cols.size(); i++) {
if ( this.create.indexOf( "`" + column.getName() + "`") == cols.get( i )) {
this.order_of_columns.add( column );
}
}
}
System.out.println(this.create);
for( column column : order_of_columns ) {

System.out.println( this.name + " : " + this.create.indexOf( "`" + column.getName() + "`") + " " + column.getName());
}
}

这是一个表的输出:

CREATE TABLE `versions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`version` varchar(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
versions : 77 name
versions : 119 version
versions : 28 id

对我做错了什么有什么想法吗?非常感谢您的帮助!

最佳答案

sort工作正常,但您实际上并没有使用排序产生的顺序。 sort之后,这是你要做的:

    for ( column column : columns ) {
for ( int i = 0; i < cols.size(); i++) {
if ( this.create.indexOf( "`" + column.getName() + "`") == cols.get( i )) {
this.order_of_columns.add( column );
}
}
}

也就是说,您按原始 顺序浏览各列。对于每一列,您都经过 cols查看是否 indexOf结果在 cols 中大批。但为此目的,cols 中元素的顺序array 无关紧要,因为您所做的只是检查索引是否在该数组中的某个位置。您实际上是在向 order_of_columns 添加内容按照它们出现在 columns 中的相同顺序.所以你没有重新排列任何东西,你的 sort没用。

但是,如果您通过 cols首先,然后您将添加到 order_of_columns基于 cols 中的顺序.因此,我认为如果你只是切换两个 for的,你会得到你想要的答案。

不过,有更好的方法可以做到这一点。您的代码通过仅对整数进行排序,然后遍历并找出与这些整数对应的列来完成大量重复工作——您已经完成的工作。更好的办法是创建一个 POJO 类 ColumnAndIndex有一个 Integer和一个 column , 并将其设为 ComparablecompareTo()只比较整数(这将是 indexOf 值)。而不是 List<Integer> , 创建一个 List<ColumnAndIndex>存储 column和索引。使用 sort就此;这将对索引进行排序。现在只需查看结果,列就已经存在了——不需要额外的工作。

关于java - Collection.sort 未返回预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147869/

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