class Scorer
{
List<ScorerLob> scorerLobs;
}
class ScorerLob
{
List<ScorerInfo> scorerInfos;
}
class ScorerInfo
{
String name;
double weight;
}
最初,代码从XML中读取值的默认配置,如下所示
<scorer>
<scorelob name="A"
<scorerInfo name = "Pop1" weight="0.5" />
<scorerInfo name = "Pop2" weight="0.3" />
</scorelob>
<scorelob name="B"
<scorerInfo name = "Pop1" weight="0.75" />
<scorerInfo name = "Pop3" weight="0.25" />
</scorelob>
</scorer>
在第二步中,读取具有更改值的xml
<scorer>
<scorelob name="A"
<scorerInfo name = "Pop1" weight="0.8" />
</scorelob>
</scorer>
在这种情况下,只有Pop1 scorerInfo的权重从0.5变为0.8。我需要创建默认配置的深层副本,并更新该副本中更改的设置的值。 我不断为每个提供的XML重复此过程,并列出不同的更新设置。
但是目前我必须通过遍历整个列表来完成此操作。在c ++中,我可以使用std :: unordered_set :: find来直接获取元素。但是,HashSet似乎在Java中支持这一点。是否有更好的方法来查找/搜索列表中的元素,仅更新其值,而不是基于迭代列表。
答案 0 :(得分:0)
我建议你把班级换成
class Scorer
{
Map<String, ScorerLob> scorerLobs = new HashMap<>();
}
class ScorerLob
{
Map<String, ScorerInfo> scorerInfos = new HashMap<>();
}
class ScorerInfo
{
String name;
double weight;
}
然后您可以将Scorer
初始化为
ScorerInfo scorerInfo1 = new ScorerInfo("Pop1",0.5);
... // other scorerInfos
ScorerLob scorerLob1 = new ScorerLob("A");
scorerLob1.put("Pop1", scorerInfo1);
... // other scorerLobs
Scorer scorer = new Scorer();
scorer.put("A", scorerLob1);
并将ScorerInfo
更新为
scorer.getScorerLobs().get("A").getScorerInfos().get("Pop1").setWeight(0.8);