Map.Entry重定义,用于2维映射的迭代器

时间:2012-05-10 11:10:40

标签: java map iterator nested

我们有一个功课来实现一个类,它创建一个将成为字符串二维图的对象。 centralMap = new HashMap<String, Map<String,String>>。教授给了我们一个接口,其中包含我们应该重新定义的方法,比如put方法(public String put(final String row, final String column, final String value))get方法(public String get(final String row, final String column))和其他一些方法......以及我无法解决的方法重新定义,是迭代器方法..在他给出的接口中,有一个类Entry,他说,我们将它只用于迭代器方法!但是我不知道我们应该用它做什么..这是类Entry,以及我们应该重新定义(实现)的迭代器方法:

final class Entry
{
    /** First Key. */
    private final String key1;

    /** Second Key. */
    private final String key2;

    /** Value. */
    private final String value;

    /** Cponstructor for a new Tripel.
     * @param key1 First Key.
     * @param key2 Second Key.
     * @param value Value.
     */
    public Entry(final String key1, final String key2, final String value)
    {
        this.key1 = key1;
        this.key2 = key2;
        this.value = value;
    }

    public String getFirstKey()
    {
        return key1;
    }

    public String getSecondKey()
    {
        return key2;
    }

    public String getValue()
    {
        return value;
    }

    @Override public boolean equals(final Object anything)
    {
        if(anything == null)
            return false;
        if(getClass() != anything.getClass())
            return false;
        final Entry that = (Entry)anything;
        return Objects.equals(getFirstKey(), that.getFirstKey())
               && Objects.equals(getSecondKey(), that.getSecondKey())
               && Objects.equals(getValue(), that.getValue());
    }

    // CHECKSTYLE- Magic Number
    @Override public int hashCode()
    {
        int hash = 7;
        hash = 17 * hash + Objects.hashCode(getFirstKey());
        hash = 17 * hash + Objects.hashCode(getSecondKey());
        hash = 17 * hash + Objects.hashCode(getValue());
        return hash;
    }
    // CHECKSTYLE+ Magic Number

    @Override public String toString()
    {
        return String.format("(%s, %s, %s)", getFirstKey(), getSecondKey(), getValue());
    }

}

我们应该重新定义的迭代器方法就是这个:@Override Iterator<Entry> iterator();我该怎么办?我听说我们应该为迭代器实现一个新类。 告诉我你是否需要我实现的类(以及实现他给出的接口)以了解我如何将嵌套映射放在另一个等等中...因为嵌套映射只是在put方法中创建的...在我的构造函数只有centralMap。

非常感谢你的帮助!!

1 个答案:

答案 0 :(得分:0)

您只需创建一个方法,即创建Iterator个条目。由于使用过的地图,每个Entry都是唯一的。所以你只需要做一些事情:

for entryMap in map do {
  entryMap get list of keysAndValues
  for keyValue in keysAndValues preppend this key
}