我有代码:
List<ModelMap> nameCustomer = new ArrayList<ModelMap>();
for (int i=1;i<150;i++) {
ModelMap map = new ModelMap();
map.put("name", "nazwa " + i);
map.put("surname", "nazwisko " + i);
map.put("number", "123 ");
nameCustomer.add(map);
}
ModelMap[] result = new ModelMap[nameCustomer.size()];
ModelMap[] rowsArray = nameCustomer.toArray(result);
如何按姓氏或号码对nameCustomer(或rowsArray)进行排序?
答案 0 :(得分:1)
您需要实施定义排序标准的Comparator,
然后,您可以使用Arrays.sort
表示数组,或Collections.sort
表示列表,或将所有内容转储为SortedSet
(例如TreeSet
)
答案 1 :(得分:1)
您可以使用Collections.sort(nameCustomer, comparator)
方法对列表进行排序。为此,您必须为Comparator编写代码。比较器的代码将是 -
public Comparator<ModelMap> getComparator(final String sortBy){
if ("surname".equals(sortBy)) {
return new Comparator<ModelMap>() {
@Override int compare(ModelMap m1, ModelMap m2)
return m1.getSurname().compareTo(m2.getSurname());
}};}
else if (condition) {// ... }
else {
throw new IllegalArgumentException("invalid sort field '" + sortBy + "'"); }
}
我假设您在ModelMap类中编写了getSurname
方法来获取姓氏。如果没有,则编写它以使上述代码有效。
您可以访问here获取进一步的帮助。干杯!!
答案 2 :(得分:0)
您可能希望使用Collections.Sort包。列表保持“自然排序”以保持一致性。 e.g。
List<Name> names = Arrays.asList(nameArray);
Collections.sort(names);
System.out.println(names);
答案 3 :(得分:0)
使用Colections.sort()并为其提供一个自定义的Comparator类实现,它将通过surname进行字符串比较。
或者使用LinkedHashMap,它在put()ang get()和键排序后具有一致性。
我希望它有所帮助!
答案 4 :(得分:0)
您可以在List上实现自己的迭代器,可以对其进行参数化以仅返回您指定的内部键。
然后,用它周围的标准分拣机“迭代”就可以了。