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

时间:2018-11-11 08:51:09

标签: java android

我有一个包含NameFoo和NumberOfFoo的类foo

我有一个arraylist,它是一个List,将其称为fooList

我想检查fooList是否具有两个相同的NameFoo,以及是否确实将NumberOfFoo(0)添加到numberOfFoo(1)并删除NumberOfFoo(0)。

因此,总的来说,我要检查的是NameFoo中是否存在重复项,如果有添加其Numbers的地方,请使用更新NumberFoo的方式保留其他nameFoo,但删除其余所有内容。

我尝试了

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 个答案:

答案 0 :(得分:0)

下面是使用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 + "]";
   }
}

Main.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]]

  }
}