我正在将分隔文件读入名为“Holder”的自定义对象中。 Holder包含一个名为“Record”的自定义对象列表。每个记录都是名为“Field”的自定义对象。每个字段都有一个字符串名称和字符串值
public class Holder{
private List RecordList;
/* constructors and methods */
}
public class Record{
private List FieldList
/* constructors and methods */
}
public class Field{
private String Name;
private String Value;
/* constructors and methods */
}
我根据该行的第一项从数据库中提取Field对象的Name。 这是我正在提取的文件的示例(行号 - 它们也是记录索引 - 从0开始为了便于解释而添加):
0 - A,123
1 - B,123,123456
2 - B,123,654321
3 - B,123,112233
4 - C,123,choice1,1/1/2011,12/31/2011
5 - C,123,choice2,1/1/2011,12/31/2011
6 - D,123,choice1,1/1/2011,12/31/2011,654321
7 - D,123,choice1,1/1/2011,12/31/2011,112233
持有人存储Record
个对象的列表。每一行都成为Record
对象,用于存储Field
个对象的列表。逗号之间的每个字符串在Value
对象上变为自己的Field
。
例如:对于第一个“B”记录(第1行),A Record BLine1
对象将如下所示:
BLine1.getFieldList.get(0).getName() = "LineType" //set from DAO not shown
BLine1.getFieldList.get(0).getValue() = "B"
BLine1.getFieldList.get(1).getName() = "Number" //set from DAO not shown
BLine1.getFieldList.get(1).getValue() = "123"
BLine1.getFieldList.get(2).getName() = "Selection" //set from DAO not shown
BLine1.getFieldList.get(2).getValue() = "123456"
我需要按每个字段对此列表进行排序。但取决于LineType,它是要对更改进行排序的项目的类型和数量。可以添加/删除LineType,并且可以更改字段。所以我真的需要尽可能通用的东西。
它将按字段在线上的顺序排序。所以它将按FieldList.getValue(0), FieldList.getValue(1), .... FieldList.getValue(FieldList.size() - 1)
所以,这是行号完成后的顺序:
0
3
1
2
4
5
7
6
这种方法最好/最有效的方法是什么?
提前致谢!
答案 0 :(得分:1)
忽略所有空值的可能性,Comparator<Record>
public int compare(Record r1, Record r2) {
// if one field list is longer than the other treat that one as greater
int lenDiff = r1.getFieldList().size() - r2.getFieldList().size();
if(lenDiff != 0) return lenDiff;
// both field lists same length, do lexicographic comparison
Iterator<Field> it1 = r1.getFieldList().iterator();
Iterator<Field> it2 = r2.getFieldList().iterator();
while(it1.hasNext()) {
Field f1 = it1.next();
Field f2 = it2.next();
int diff = f1.getValue().compareTo(f2.getValue());
if(diff != 0) return diff;
}
// all components equal, so both lists equal.
return 0;
}
您可以将其与Collections.sort
一起使用。
显然,如果你有一个null
记录,或一个null
字段的记录,或一个null
字段的字段,那么这一切都会变得更加混乱... < / p>