if (!mainMethods.matrix.isEmpty()) {
for (int i = 0; i < mainMethods.matrix.values().size(); i++) {
if (mainMethods.matrix.containsValue(getArrayList()[i].getValue().toString().contains(textValue.getText()))) {
String errorTitle = "Impossível completar a operação.";
String errorMessage = "Não é possível adicionar um valor de chave repetido.";
JOptionPane.showMessageDialog(getParent(), errorMessage, errorTitle, JOptionPane.ERROR_MESSAGE);
}
}
有一个名为“矩阵”的哈希图,它有很多键。每个键的值都是一个具有自己值的ArrayList。考虑到这一点,我无法找到一种方法来测试ArrayList值中是否有特定值,因为如果我将字符串参数传递给HashMap的方法“.containsValue()”,该方法将找到ArrayList对象,测试将为false。因此,我必须做一些相当疯狂的事情,就像我在例子中所做的那样。正如您所看到的,没有像“getArrayList()”或“getValue()”这样的东西。这是一个非常复杂的情况,我试图用“伪代码”来解释我的观点。
你知道怎么解决吗?
如果我没理解错的话,这样的事情应该有用:
private <K, V> V getValueIfKeyContains(final Map<List<K>, V> map, final K desiredKey) {
for (final Entry<List<K>, V> entry : map.entrySet()) {
if (entry.getKey().contains(desiredKey)) {
return entry.getValue();
}
}
return null;
}
因此,您可以在地图上循环,检查每个键是否包含所需的键。
我强烈推荐两件事:
做一件事。将数据结构更改为。。。
旧的是:
HashMap <Key, ArrayList>
更改为
<代码>哈希映射
这是假设你在arrayList中有不可变的对象。所以现在一旦你使用键得到一个对象。您可以再次使用它的键在内部映射中搜索。
您可以使用迭代器并单独检查每个数组列表:
Iterator it = mainMethod.matrix.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
If(pairs.getValue().contains(your value)
{
// do stuff
}
}