【问题标题】:What is the easiest way to get the Value in a HashMap of one item?在一个项目的 HashMap 中获取值的最简单方法是什么?
【发布时间】:2013-08-05 20:30:02
【问题描述】:

我有一个包装器 HashMap,我用它来包装带有时间戳的 Set。每个 HashMap 只添加一个 Element。

在这个 HashMap 中只有一项的值最简单的方法是什么?即使我知道只有一个项目,我是否必须迭代这个 HashMap?

这是最简单/最快的方法吗:

public long compareTimeCreated(HashMap<HashSet<String>, Long> hashMap1, HashMap<HashSet<String>, Long> hashMap2) {
            long timeDifference = 0;
            long hashMap1Time = 0;
            long hashMap2Time = 0;

            for(Long value : hashMap1.values())
                hashMap1Time = value;

            for(Long value : hashMap2.values())
                hashMap2Time = value;

            timeDifference = (hashMap1Time > hashMap2Time) ? (hashMap1Time - hashMap2Time) : (hashMap2Time - hashMap1Time);

            return timeDifference;
        }

【问题讨论】:

  • 为什么HashMap而不是自定义类?
  • 我...不明白这个结构的意义。你到底想做什么?
  • 使用 HashMap 存储一个值似乎真的很奇怪......
  • 没错,只是创建一个pojo?
  • 是的,只是一个带有两个字段的 POJO,一个是 HashSet&lt;String&gt;,另一个是 Long。我只是希望HashSet 不只包含一个元素......

标签: java generics collections compare


【解决方案1】:

如果您知道恰好一项,您可以使用:

Long value = map.values().iterator().next();

或与番石榴:

Long value = Iterables.getOnlyElement(map.values());

(但我同意使用只有一个元素的地图是不寻常的。它可能有时很有用,通常适合地图的其他用途。这一切取决于上下文。)

【讨论】:

  • .下一个?而不是 .moveNext()?
  • 酷:),我暂时用这个,以后可能会换成pojo。
  • “它有时会很有用,通常用于配合地图的其他用途。”。你能举个例子吗?我从未见过它,我很好奇(真的)。谢谢。
  • @mael:好吧,您可能希望将值传递给已经需要映射的方法 - 或者将其与另一个映射合并。
  • 嗯,好的。我认为那将是某种棘手的代码。我很失望:p无论如何,谢谢你:)
【解决方案2】:

不确定这是一个很好的实现,但是鉴于您只有一个值,您可以执行类似的操作

long hashMap1Value = (long)hashMap1.values().toArray()[0];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多