繁体   English   中英

用内部值的总和更新Java列表中的每个对象

[英]Update each object in list in Java with the sum of internal values

我有一个ContactDto对象的列表。 我在ContactDto中有两个字段,分别是value和totalValue。 我想要totalValue中所有值的总和。 在所有对象中,此totalValue应该相同。 这是我的代码

ArrayList<ContactDto> l = new ArrayList<>();
    ContactDto c1 = new ContactDto();
    c1.setContact("SpecialContact");
    c1.setContactType("Phone");
    c1.setSlNo("1");
    c1.setValue(10);
    l.add(c1);
    ContactDto c2 = new ContactDto();
    c2.setContact("ContactSpecial");
    c2.setContactType("Email");
    c2.setSlNo("3");
    c2.setValue(20);
    l.add(c2);
    ContactDto c3 = new ContactDto();
    c3.setContact("NormalContact");
    c3.setContactType("Phone");
    c3.setSlNo("1");
    c3.setValue(30);
    l.add(c3);
    int totalValue = 0;
    for(int i = 0; i < l.size(); i++) {
        l.get(i).setTotalValue(l.get(i).getValue());
    }
    System.out.println(l);

输出量

我收到的是

[ContactDto [slNo=1, contact=SpecialContact, contactType=Phone, value=10, totalValue=10], ContactDto [slNo=3, contact=ContactSpecial, contactType=Email, value=20, totalValue=20], ContactDto [slNo=1, contact=NormalContact, contactType=Phone, value=30, totalValue=30]]

我期望的是

 [ContactDto [slNo=1, contact=SpecialContact, contactType=Phone, value=10, totalValue=60], ContactDto [slNo=3, contact=ContactSpecial, contactType=Email, value=20, totalValue=60], ContactDto [slNo=1, contact=NormalContact, contactType=Phone, value=30, totalValue=60]]

首先 ,您必须迭代所有对象以求它们的值。

之后,您再次迭代该列表,现在您设置了新计算的总值。

换句话说:您需要在这里通过两次 一个用于计算总价值,另一个用于使用该总价值更新对象。 这就是全部:

for(ContactDto dto : l) {
  totalValue += dto.getValue();
}

for(ContactDto dto : l) {
  dto.setTotalValue(totalValue);
} 

是的:您应该使用for-each循环-在这里使用过于复杂的基于索引的for循环毫无意义。

除此之外:这解决了所提出的问题 如果此实现确实有意义-则值得怀疑。 您会看到,这导致信息重复 那很少是一件好事。 A“名单共有”应该是列表 ,而不是东西,反复反映了每个对象的属性!

要保留总和,应将其保存在totalValue字段中,如下所示:

for(int i = 0; i < l.size(); i++) {
    totalValue += l.get(i).getValue();
}

然后为arraylist中的所有元素设置相同的值-

for(int j=0;j<l.size(); j++) {
    l.get(j).setTotalValue(totalValue);
}
for(int i = 0; i < l.size(); i++) {
    l.get(i).setTotalValue(l.get(i).getValue());
}

在这里,您将每个对象的总值设置为该对象的值,而不是总值。 您需要做的是:

for(int i = 0; i < l.size(); i++) {
    totalValue = totalValue + l.get(i).getValue();
}

for(int i = 0; i < l.size(); i++) {
    l.get(i).setTotalValue(totalValue);
}

那应该做你的工作。 您需要首先对所有值求和以获得totalValue,然后将totalValue设置为列表中的每个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM