【问题标题】:Sorting the data in increasing order based on keys in Multimap Google Guava根据 Multimap Google Guava 中的键按升序对数据进行排序
【发布时间】:2013-12-02 18:24:45
【问题描述】:

我创建了一个多图

Multimap<Integer, String> mhm= ArrayListMultimap.create();

我的数字范围从 0 到 2400。

我已经插入了类似的数据

 mhm.put(800 ,"A")
 mhm.put(1200 ,"B")
 mhm.put(1200 ,"A")
 mhm.put(1500 ,"B")
 mhm.put(600 ,"A")
 mhm.put(700 ,"B")
 mhm.put(1200 ,"A")
 mhm.put(1201 ,"B")

我想对整数键字段的 Multimap 进行排序? satckoverflow 上没有太多帖子告诉如何做到这一点。

预期输出:

 mhm.put(600 ,"A")
 mhm.put(700 ,"B")
 mhm.put(800 ,"A")
 mhm.put(1200 ,"B")
 mhm.put(1200 ,"A")
 mhm.put(1200 ,"A")
 mhm.put(1201 ,"A")
 mhm.put(1500 ,"B")

请注意,预期输出仅按键排序。 如果两个键的值相同,那么首先出现的键应该在前。 如何执行?当我们根据键对 Multimap 进行排序时,这种情况会自动处理吗?

这不是家庭作业问题,尝试在 Google Guava 周围玩耍。

【问题讨论】:

  • 你遵守它不是功课
  • @S.SWAIN 我刚完成学期考试。试图为展示位置做准备。我不太擅长java。我需要一些帮助来解决它。

标签: java key guava multimap


【解决方案1】:

您需要按自然顺序排列的键 - 只需使用自定义 MultimapnewListMultimap from Multimaps class

ListMultimap<Integer, String> mhm = Multimaps.newListMultimap(
  new TreeMap<Integer, Collection<String>>(),
  new Supplier<List<String>>() {
    public List<String> get() {
      return Lists.newArrayList();
    }
  });

在 Java 8 中它更短:

ListMultimap<Integer, String> mhm = Multimaps.newListMultimap(
    new TreeMap<>(), ArrayList::new);

但如果您使用的是 Guava 16+(现在应该),您可以使用更干净的 MultimapBuilder

ListMultimap<Integer, String> mhm = MultimapBuilder.treeKeys().arrayListValues().build();

因为您可以将 multimap 视为映射键 -> 集合,所以只需使用 JDK 的 TreeMap,它根据其键的自然顺序排序

例子:

mhm.put(2, "some");
mhm.put(1, "value");
mhm.put(2, "here");
System.out.println(mhm.toString());
// { 1: [ "value" ], 2: [ "some", "here" ] }

【讨论】:

  • 我希望它们排在首位,但如果有重复的键,则应保持自然顺序
  • 它是 Multimap,所以如果在 multimap 中有重复键的条目,它们将被添加到相应的值集合中(这里:List)。
  • 感谢 @Xaerxess 推荐 MultimapBuilder
【解决方案2】:

如果你可以使用不可变的多图,并且不需要改变多图,那么它相当简单:

new ImmutableListMultimap.Builder<Integer, String>
   .orderKeysBy(Ordering.natural())
   .putAll(multimap) // or put each entry
   .build();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多