java - 保留 Guava SetMultimap 中的插入顺序

标签 java java-8 guava

我有一个要求,我需要有 MultiMap,其中不应有重复值。 为此,我使用了 Guava SetMultimap。 但现在我想保留插入顺序。如何使用 SetMultiMap 实现它? 非常感谢任何帮助。

谢谢, 图沙尔

最佳答案

对于稍后出现的人,这里有一些测试代码来显示 LinkedHashMultimap 的行为:

  private static void assertTrue(boolean x)
  {
    if (!x)
    {
      throw new AssertionError();
    }
  }

  public static void main(String[] args)
  {
    SetMultimap<String, String> sm = LinkedHashMultimap.create();

    List<Map.Entry<String, String>> entries = Arrays.asList(
        new AbstractMap.SimpleEntry<>("z", "z"),
        new AbstractMap.SimpleEntry<>("a", "a"),
        new AbstractMap.SimpleEntry<>("x", "x"),
        new AbstractMap.SimpleEntry<>("z", "x") // Multiple values per key OK
    );

    for (Map.Entry<String, String> entry : entries)
    {
      assertTrue(sm.put(entry.getKey(), entry.getValue()));
    }

    assertTrue(!sm.put("z", "z")); // Duplicate not added

    // Check iterator ordering is same as insertion order
    Iterator<Map.Entry<String, String>> i1 = sm.entries().iterator();
    Iterator<Map.Entry<String, String>> i2 = entries.iterator();
    while (i1.hasNext() && i2.hasNext())
    {
      assertTrue(i1.next().equals(i2.next()));
    }
    // Check same number of elements in both collections
    assertTrue(!i1.hasNext() && !i2.hasNext());
  }

关于java - 保留 Guava SetMultimap 中的插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667207/

相关文章:

java - 为什么 Java 8 和 Java 11 之间解析的依赖项不同?

java - 有没有办法判断运行时类型是否被删除

java - 使用 ANT 生成元模型时出现错误

java - 有人能给我解释一下这个排列/紊乱程序吗

java - 有条件地在 JSF 组件标记中设置属性

java - 使用 Java 8 lambda 或流 api 的过滤器列表

java - 如何从 Guava 17 替换 Guava new MapMaker().softValues().makeMap()

java - 使用 Guava 作为套接字客户端库

java - 树形结构游标API

java - 带有 Java 配置的 Spring OAuth2 的最简单示例是什么?