背景
容器中收集了一堆数据,但是我的目的是统计数据是否合法,一旦遇见一个不合法的就记录数加一,但是一堆数据,我只记录一个。
过程
错误复现
public class Foreach {
public static void main(String[] args) {
Num handle = handle();
System.out.println("记录数:" + handle.getNumber() +", 实际需求需要的记录数是:1");
}
public static Num handle() {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
Num num = new Num();
num.setNumber(0);
list.forEach(str -> {
if (!str.equals("cc")) {
num.setNumber(num.getNumber()+1);
return;
}
});
return num;
}
static class Num {
private Integer number;
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
}
}
结果
记录数:2,实际需求需要的记录数是:1
bug修复
public class Foreach {
public static void main(String[] args) {
Num handle = handle();
System.out.println("记录数:" + handle.getNumber() +", 实际需求需要的记录数是:1");
}
public static Num handle() {
ArrayList<String> list = new ArrayList<>();
list.add("aa");
list.add("bb");
Num num = new Num();
num.setNumber(0);
for (String str: list) {
if (!str.equals("cc")) {
num.setNumber(num.getNumber() + 1);
return num;
}
}
return num;
}
static class Num {
private Integer number;
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
}
}
结果打印
记录数:1, 实际需求需要的记录数是:1
小结
这就不理解forEach的工作过程导致的错误。