我有一个包含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。
解决这些问题很有趣,但是这次我很想念它。
答案 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]]
}
}