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。这很有魅力。