Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 树映射foreach不';不改变价值对象_Java_Android_Treemap - Fatal编程技术网

Java 树映射foreach不';不改变价值对象

Java 树映射foreach不';不改变价值对象,java,android,treemap,Java,Android,Treemap,因此,我有一个TreeMap,通过foreach我试图修改发送器的内部属性,但它感觉就像是在TreeMap中复制对象,因为它不会更改TreeMap中的值 我的foreach代码: for (TreeMap<Integer, Transmitter> current : transmitterDiagnosticMap.values()) { for (Transmitter t : current.values()) {

因此,我有一个
TreeMap
,通过foreach我试图修改发送器的内部属性,但它感觉就像是在TreeMap中复制对象,因为它不会更改TreeMap中的值

我的foreach代码:

        for (TreeMap<Integer, Transmitter> current : transmitterDiagnosticMap.values()) {
            for (Transmitter t : current.values()) {
                String transmitterError = t.printErrorReport(date, appContext);
                if (transmitterError != null)
                    stringsErrorsAndWarnings.add(transmitterError);
            }
        }

我能注意到的是
变送器t
实际上将值从
lastStatus=0
更改为
lastStatus=1
,但树映射中没有任何更改

您必须使用迭代器来改变树映射中的值。使用
current.values()
将创建一个副本,而不是改变对象

您需要迭代树映射的键并更新值

for (TreeMap<Integer, Transmitter> current : transmitterDiagnosticMap.values()) {
    for (Map.Entry<Integer, Transmitter> entry : current.entrySet()) {
        Transmitter t = entry.getValue();
        String transmitterError = t.printErrorReport(date, appContext);
        if (transmitterError != null)
            stringsErrorsAndWarnings.add(transmitterError);
        entry.setValue(t);
    }
}
for(当前树映射:transmitterDiagnosticMap.values()){
对于(Map.Entry:current.entrySet()){
变送器t=entry.getValue();
字符串transmitterError=t.printErrorReport(日期,appContext);
if(传输错误!=null)
stringsErrorsAndWarnings.add(传输错误);
entry.setValue(t);
}
}

必须使用迭代器来改变树映射中的值。使用
current.values()
将创建一个副本,而不是改变对象

您需要迭代树映射的键并更新值

for (TreeMap<Integer, Transmitter> current : transmitterDiagnosticMap.values()) {
    for (Map.Entry<Integer, Transmitter> entry : current.entrySet()) {
        Transmitter t = entry.getValue();
        String transmitterError = t.printErrorReport(date, appContext);
        if (transmitterError != null)
            stringsErrorsAndWarnings.add(transmitterError);
        entry.setValue(t);
    }
}
for(当前树映射:transmitterDiagnosticMap.values()){
对于(Map.Entry:current.entrySet()){
变送器t=entry.getValue();
字符串transmitterError=t.printErrorReport(日期,appContext);
if(传输错误!=null)
stringsErrorsAndWarnings.add(传输错误);
entry.setValue(t);
}
}

你说“树映射中没有任何更改”是什么意思?显然,如果只更改值,树映射的键和顺序不会更改。@Dabiuteef我指的是树映射中的对象(值)。树映射中的所有值对象都保留为
lastStatus=0
,即使我使用问题中提供的foreach将它们全部更改为1。您说“树映射中没有任何更改”是什么意思?显然,如果只更改值,树映射的键和顺序不会更改。@Dabiuteef我指的是树映射中的对象(值)。树映射中的所有值对象保留为
lastStatus=0
,即使我使用问题中提供的foreach将它们全部更改为1。非常感谢,Anoop。这很有魅力。非常感谢你,Anoop。这很有魅力。