搜索和更新列表中的某个元素

时间:2016-11-03 04:40:44

标签: java

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中支持这一点。是否有更好的方法来查找/搜索列表中的元素,仅更新其值,而不是基于迭代列表。

1 个答案:

答案 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);