我正在实现一个简单的单用户DBMS,我必须能够拥有ORDER BY指令。
我的想法是,我可以创建一个包含任意数量列的表,并且有一个算法可以在给定特定列数和每列的排序(升序或降序)的情况下对表进行排序。
以下是我的基本课程:
public class Column{
final static INT=0;
final static CHAR =1;
final static BOOLEAN =2;
int ColType;
}
public class Table{
ArrayList<Column> columns;
ArrayList<Tuple> tuples;
}
public class Tuple{
Table table;//The table to which the tuple belongs to. This gives us the columns types required in the tuple
ArrayList<Object> vals;
}
是否有任何现有算法可以完成此操作或您可以给我解决此问题的任何指导原则?
我希望能够做的是有一个方法sortTableBy(ArrayList<Column> n
),它将我给它的列作为参数来订购表。
例如,如果我有
Table: Student
SName | sGPA | sCollege
Maria 4.5 Harvard
Brand 4.5 UFB
John 3 UCLA
Wislon 2 Berkley
如果我致电sortTableBy([sName,sGPA])
它会产生
Table: Student
SName | sGPA | sCollege
Brand 4.5 UFB
John 3 UCLA
Maria 4.5 Harvard
Wislon 2 Berkley
致电sortTableBy([sGPA,sName])
Table: Student
SName | sGPA | sCollege
Wislon 2 Berkley
John 3 UCLA
Brand 4.5 UFB
Maria 4.5 Harvard
并致电sortTableBy([sGPA,SCollege])
Table: Student
SName | sGPA | sCollege
Wislon 2 Berkley
John 3 UCLA
Maria 4.5 Harvard
Brand 4.5 UFB
答案 0 :(得分:0)
每列需要comparer
(订单条件中列),Java 8 Stream
可以执行此操作:
Comparator<Table> byColumn0 = (t1, t2) -> t1.columns.get(0).compareTo(t2.columns.get(0));
Comparator<Table> byColumn1 = (t1, t2) -> t1.columns.get(1).compareTo(t2.columns.get(1));
tables.stream().sorted(byColumn0.thenComparing(byColumn1));