Java排序映射或数组

时间:2012-12-03 13:03:43

标签: java

我有代码:

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

5 个答案:

答案 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上实现自己的迭代器,可以对其进行参数化以仅返回您指定的内部键。

然后,用它周围的标准分拣机“迭代”就可以了。