我试图使用AOSP中的SortCursor类,该类在如何将2个游标表示为1个已排序游标?。但是,它似乎根本不对我给出的游标进行排序。排序如何进行?
示例代码:
String[] columnNames = {"name", "value"};
MatrixCursor matrixCursor1 = new MatrixCursor(columnNames);
matrixCursor1.addRow(new String[]{"cursor 1 value A", "9"});
matrixCursor1.addRow(new String[]{"cursor 1 value B", "2"});
matrixCursor1.addRow(new String[]{"cursor 1 value C", "1"});
MatrixCursor matrixCursor2 = new MatrixCursor(columnNames);
matrixCursor2.addRow(new String[]{"cursor 2 value A", "70"});
matrixCursor2.addRow(new String[]{"cursor 2 value B", "8"});
matrixCursor2.addRow(new String[]{"cursor 2 value C", "6"});
Cursor sortCursor = new SortCursor(new Cursor[]{matrixCursor1, matrixCursor2}, columnNames[1]);
while (sortCursor.moveToNext()) {
String name = sortCursor.getString(sortCursor.getColumnIndexOrThrow(columnNames[0]));
String value = sortCursor.getString(sortCursor.getColumnIndexOrThrow(columnNames[1]));;
Log.v("SortCursor", "Name: " + name + ", Value: " + value);
}
sortCursor.close();
运行此代码时的输出:
V/SortCursor: Name: cursor 2 value A, Value: 70
V/SortCursor: Name: cursor 2 value B, Value: 8
V/SortCursor: Name: cursor 2 value C, Value: 6
V/SortCursor: Name: cursor 1 value A, Value: 9
V/SortCursor: Name: cursor 1 value B, Value: 2
V/SortCursor: Name: cursor 1 value C, Value: 1
如您所见,这些值是完全未排序的。我希望有1,2,6,8,9,9,70。
关于SortCursor,有两件重要的事情要知道。
1.它从游标中读取的值是字符串而不是数字,因此字符串“ 70”小于字符串“ 8”。
2.仅在寻找最小值时比较每个游标的下一个值。因此,在将每个单独的游标分配给SortCursor之前,必须对其进行排序。
因此,在给定的示例中,“ 70”小于“ 9”,因此首先执行,然后“ 8”小于“ 9”,其次执行,“ 6”小于“ 9”,然后进行。然后,仅保留第一个光标中的值。
如您所见,所使用的游标实际上是已排序的,只是没有按照您期望的方式进行排序。
如果在创建SortCursor之前对各个游标进行排序,并使用字符串而不是数字,则将获得预期的结果。
MatrixCursor matrixCursor1 = new MatrixCursor(columnNames);
matrixCursor1.addRow(new String[]{"cursor 1 value C", "01"});
matrixCursor1.addRow(new String[]{"cursor 1 value B", "02"});
matrixCursor1.addRow(new String[]{"cursor 1 value A", "09"});
MatrixCursor matrixCursor2 = new MatrixCursor(columnNames);
matrixCursor2.addRow(new String[]{"cursor 2 value C", "06"});
matrixCursor2.addRow(new String[]{"cursor 2 value B", "08"});
matrixCursor2.addRow(new String[]{"cursor 2 value A", "70"});
会给你
V/SortCursor: Name: cursor 1 value C, Value: 01
V/SortCursor: Name: cursor 1 value B, Value: 02
V/SortCursor: Name: cursor 2 value C, Value: 06
V/SortCursor: Name: cursor 2 value B, Value: 08
V/SortCursor: Name: cursor 1 value A, Value: 09
V/SortCursor: Name: cursor 2 value A, Value: 70
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句