为了账号安全,请及时绑定邮箱和手机立即绑定

检查类列表中的重复项并在android中更新类中的值

检查类列表中的重复项并在android中更新类中的值

慕运维8079593 2022-01-12 15:07:22
我有一个包含 NameFoo 和 NumberOfFoo 的类 foo我有一个数组列表,它是一个列表,称之为 fooList我想检查 fooList 是否有两个相同的 NameFoo,如果它确实将 NumberOfFoo(0) 添加到 numberOfFoo(1) 并删除 NumberOfFoo(0)。所以总的来说,我想要检查 NameFoo 中的重复项,如果有添加他们的数字,保持不同的 nameFoo 更新 NumberFoo 但删除所有其余的。我尝试了几件事,例如int mSize = mFoo.size();    if(mSize>1) {        for (int i = 0; i < mSize; i++) {            int counter = 0;                for (int j = 1; j < mSize; j++) {                    if   (foo.get(i).getName().equals(foo.get(j).getName())) {                        counter++;                        foo.get(i).setNumber(String.valueOf(counter));                    }                }        }这将返回正确添加的数字,但不会删除已添加的数字,现在假设我尝试在循环中执行 foo.remove(j),循环中的 foo.getSize 或 mSize 将减少并且它会抛出一个 IndexOutOfBoundsException。解决这些问题很有趣,但这次我很想念它。
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

通过使用下面的 java-7 是您的问题的一个示例,将 List 转换为具有唯一键和重复值的 Map,它们求和fooNumber并转换为List


Foo.java


class Foo{

private String nameFoo;


private String numberOfFoo;


public Foo() {}


public Foo(String nameFoo, String numberOfFoo) {

    this.nameFoo=nameFoo;

    this.numberOfFoo=numberOfFoo;


}


public String getNameFoo() {

    return nameFoo;

}


public void setNameFoo(String nameFoo) {

    this.nameFoo = nameFoo;

}


public String getNumberOfFoo() {

    return numberOfFoo;

}


public void setNumberOfFoo(String numberOfFoo) {

    this.numberOfFoo = numberOfFoo;

}


@Override

public String toString() {

    return "Foo [nameFoo=" + nameFoo + ", numberOfFoo=" + numberOfFoo + "]";

   }

}

主.java


public class MainClass {


public static void main(String[] args) {


Foo f1 = new Foo();

f1.setNameFoo("tony");

f1.setNumberOfFoo(100);

Foo f2 = new Foo();

f2.setNameFoo("tony");

f2.setNumberOfFoo(200);

Foo f3 = new Foo();

f3.setNameFoo("cap");

f3.setNumberOfFoo(500);

List<Foo> l = Arrays.asList(f1,f2,f3);

Map<String,List<Foo>> m = new HashMap<>();

List<Foo> result = new ArrayList<>();

for(Foo f:l) {

    if(m.get(f.getNameFoo())==null) {

        List<Foo> templist = new ArrayList<>();

        templist.add(f);

        m.put(f.getNameFoo(), templist);

    }else {

        List<Foo> list =m.get(f.getNameFoo());

        list.add(f);

        m.put(f.getNameFoo(), list);

    }

}

for(String s : m.keySet()) {

    Foo fin = new Foo();

    Integer fooNumber =0;

    for(Foo foo : m.get(s)) {

        fooNumber = fooNumber+Integer.valueOf(foo.getNumberOfFoo());

        fin.setNameFoo(foo.getNameFoo());

        fin.setNumberOfFoo(fooNumber.toString());

    }

    result.add(fin);

}

System.out.println(result); //[Foo [nameFoo=tony, numberOfFoo=300], Foo [nameFoo=cap, numberOfFoo=500]]


  }

}


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信