因为不能直接展示生产数据与生产数据结构,所以写一个简单的例子
class Stu{
private String name;
private int age;
getter setter constructor 略
}
List<Stu> list = new ArrayList();
list.add(new Stu("s1",16));
list.add(new Stu("s2",36));
list.add(new Stu("s3",86));
list.add(new Stu("s4",106));
boolean a = list.stream().anyMatch(s->s.getAge()<50);
boolean b = list.stream().allMatch(s->s.getAge()>=50);
按道理a =true;b=false; 但是生产确实a=false,b=true,试了好几次都一样,检查好几遍感觉没问题
之后我改进代码
boolean a = list.stream().map(Stu::getAge).anyMatch(age->age<50);
boolean b = list.stream().map(Stu::getAge).allMatch(age->age>=50);
a就等于true,b就等于false了 ,很奇怪,就多加个map(Stu::getAge)就好了。
之后想复现这个问题,还不能复现,感觉stream可能在极端情况出现了bug。