Map.Entry的重新定义,对2维映射的迭代器(Map.Entry redefinition, f

2019-10-29 15:22发布

我们有一门功课,实现一个类,即创建一个对象,这将是一个2维地图字符串。 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) )和其他一些方法..和我不能重新定义一个,就是迭代方法。在他给的接口,有一个类条目,他说,我们将使用它只是为iterator方法! 但是我不知道应该怎样用它做什么。这里是类条目,而我们应该重新定义(实施)iterator方法:

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。

非常感谢你的帮助!!

Answer 1:

您只需创建一个方法,创建一个Iterator条目。 每一个Entry都是独一无二的,因为所使用的地图。 所以,你需要做的仅仅是这样的:

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


文章来源: Map.Entry redefinition, for iterator of 2 Dimensional Map