【问题标题】:how to sort items of a MAP and remove one?如何对 MAP 的项目进行排序并删除一个?
【发布时间】:2012-09-20 23:36:37
【问题描述】:

我正在使用以下代码将对象列表保存在 MAP 中,

 Map<String, List<Rows>> map = new HashMap<String, List<Rows>>()
 while( rs.next() ) {
      Rows row = new Rows();
      /*
       * code to initialize the values of row from the record
      */
     String category = rs.getString("Cat");
     if(!map.containsKey(category)){
         map.put(category, new ArrayList<Rows>());
     }
     map.get(category).add(row);
  }

是否可以对每个类别的值进行排序? 如何删除特定类别中的项目?

【问题讨论】:

标签: java object map hashmap


【解决方案1】:

要删除项目使用remove() map 方法:

map.remove(category)

据我了解,每个类别的项目都存储在列表中,所以排序很简单:

Collections.sort(map.get(category))

您可以使用自定义Comparator 自定义排序。

编辑:

但是,如果您希望将 keys 排序到您的地图中,您必须使用 SortedMap,例如TreeMap 并且可能会提供您的比较器来比较您的类别。否则键将按字母顺序排序。

【讨论】:

    【解决方案2】:

    @Eme 如果你想要一个按其键排序的地图,它被称为SortedMap

    如果您想从特定类别的列表中删除其中一项,您可以执行以下操作:

    List<Row> list = map.get(category);
    list.remove(index of element you want to remove);
    map.put(category, list);
    

    【讨论】:

      【解决方案3】:

      是否可以对类别中的值进行排序: 使用PriorityQueue 而不是列表来保持值在添加时排序。

      要删除,您可以使用 map.get(category).remove(row);或者创建一个继承自 map 并覆盖 remove(..) 的新类。您可以在此处放置代码以从附加到特定键而不是地图本身的列表中删除。

      【讨论】:

        【解决方案4】:

        使用列表将项目存储在您的类别中。还有一个 API 函数来排序列表。并使用 (map.remove(category) ).get(0) 获取您的类别列表中的第一项

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-18
          • 2013-12-03
          • 1970-01-01
          • 2011-01-17
          • 2014-05-09
          • 1970-01-01
          • 2021-08-23
          • 1970-01-01
          相关资源
          最近更新 更多