根据Multimap Google Guava中的键,按递增顺序对数据进行排序

 mobiledu2502895137 发布于 2023-02-13 13:17

我创建了一个Multimap

Multimap 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")

我想在关键字段Integer上对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.

2 个回答
  • 你想在自然秩序键-只需使用自定义的Multimap使用newListMultimapMultimaps类:

    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();
    

    因为你可以把多重映射为地图键- >收集,只需使用JDK的TreeMap这是根据其键的自然顺序进行排序.

    例:

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

    2023-02-13 13:18 回答
  • 如果你可以使用不可变的多图,并且不需要改变多图,那么它很简单:

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

    2023-02-13 13:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有