gpt4 book ai didi

java - 迭代嵌套映射

转载 作者:行者123 更新时间:2023-12-02 12:18:51 25 4
gpt4 key购买 nike

我将这些方法放在一起来帮助迭代嵌套映射(对于 another SO question )。

正如您可以清楚地看到的,除了泛型之外,前两个方法实际上几乎完全相同,一个调用 iV,另一个调用 iiV。有什么方法可以将它们折叠成一种方法,或者至少将机制的清晰重复移到一个地方?

如果做得正确,应该可以迭代任何深度的嵌套映射。

// Iterating across Maps of Maps of Maps.
static <K1, K2, K3, V> Iterator<Iterator<Iterator<V>>> iiiV(Map<K1, Map<K2, Map<K3, V>>> mmm) {
final Iterator<Map<K2, Map<K3, V>>> mmi = iV(mmm);
return new Iterator<Iterator<Iterator<V>>>() {
@Override
public boolean hasNext() {
return mmi.hasNext();
}

@Override
public Iterator<Iterator<V>> next() {
return iiV(mmi.next());
}

@Override
public void remove() {
mmi.remove();
}
};
}

// Iterating across Maps of Maps.
static <K1, K2, V> Iterator<Iterator<V>> iiV(Map<K1, Map<K2, V>> mm) {
final Iterator<Map<K2, V>> mi = iV(mm);
return new Iterator<Iterator<V>>() {
@Override
public boolean hasNext() {
return mi.hasNext();
}

@Override
public Iterator<V> next() {
return iV(mi.next());
}

@Override
public void remove() {
mi.remove();
}
};
}

// Iterating across Map values.
static <K, V> Iterator<V> iV(final Map<K, V> map) {
return iV(map.entrySet().iterator());
}

// Iterating across Map.Entries.
static <K, V> Iterator<V> iV(final Iterator<Map.Entry<K, V>> mei) {
return new Iterator<V>() {
@Override
public boolean hasNext() {
return mei.hasNext();
}

@Override
public V next() {
return mei.next().getValue();
}

@Override
public void remove() {
mei.remove();
}
};
}

最佳答案

为什么不:

static <K, V> Iterator<V> iV(final Iterator<V> mei) {
return new Iterator<V>() {
@Override
public boolean hasNext() {
return mei.hasNext();
}

@Override
public V next() {
if (Iterator.class.isAssignableFrom(V.class)) {
Iterator it = iV((Iterator)V);
return it.hasNext() ? it.next() : ((Iterator)mei.next()).next();
}
else
return mei.next().getValue();
}

@Override
public void remove() {
mei.remove();
}
};
}

(未测试)

关于java - 迭代嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15639291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com