1

我有代码:

    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)进行排序?

4

5 回答 5

1

您需要实现一个定义排序标准的比较
器, 然后您可以Arrays.sort用于数组或Collections.sort列表,或将所有内容转储到SortedSet(例如,TreeSet

于 2012-12-03T13:08:01.613 回答
1

您可以使用该Collections.sort(nameCustomer, comparator)方法对列表进行排序。为此,您必须为 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 + "'"); }
       }

我假设您getSurname在 ModelMap 类中编写了一个方法来获取姓氏。如果没有,则编写它以使上述代码正常工作。

您可以访问此处获取更多帮助。干杯!!

于 2012-12-03T13:25:29.577 回答
0

您可能想要使用 Collections.Sort 包。列表保持“自然排序”以保持一致性。例如

    List<Name> names = Arrays.asList(nameArray);
    Collections.sort(names);
    System.out.println(names);
于 2012-12-03T13:05:06.467 回答
0

使用 Colections.sort() 并给它一个自定义的 Comparator 类实现,它将按姓氏进行字符串比较。

或者使用 LinkedHashMap,它在 put() 和 get() 和键排序之后具有一致性。

我希望它有帮助!

于 2012-12-03T13:07:14.703 回答
0

您可以在 List 上实现自己的迭代器,可以对其进行参数化以仅返回您指定的内部键。

然后,在它周围使用标准分类器“迭代”就可以了。

于 2012-12-03T13:12:24.833 回答