一、问题代码
public class ParallelStreamTest {
public static void main(String[] args) {
List<DataA> dataAList =new ArrayList<>();
List<DataB> dataBList = new ArrayList<>();
for (int i = 0; i <5 ; i++) {
DataA a = new DataA();
if (i>3){
a.setId("111");
}else {
a.setId("222");
}
dataAList.add(a);
}
for (int i = 0; i <100 ; i++) {
DataB b = new DataB();
if (i>50){
b.setId("111");
}else {
b.setId("222");
}
dataBList.add(b);
}
List<DataC> dataCList = getDataC(dataAList,dataBList);
System.out.println(dataCList.toString());
}
private static List<DataC> getDataC(List<DataA> dataAList, List<DataB> dataBList){
List<DataC> dataCList = new ArrayList<>();
dataBList.parallelStream().forEach(b->{
DataA a = dataAList.parallelStream().filter(aa->aa.id.equals(b.id)).findFirst().orElse(new DataA());
DataC c = new DataC();
c.setId(a.id);
dataCList.add(c);
});
return dataCList;
}
static class DataA{
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
static class DataB{
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
static class DataC{
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
}
二、执行结果
每次执行结果不统一
三、解决办法
private static List<DataC> getDataC(List<DataA> dataAList, List<DataB> dataBList){
List<DataC> dataCList = new ArrayList<>();
dataBList.forEach(b->{
DataA a = dataAList.stream().filter(aa->aa.id.equals(b.id)).findFirst().orElse(new DataA());
DataC c = new DataC();
c.setId(a.id);
dataCList.add(c);
});
return dataCList;
}
去掉parallelStream()每次执行结果一致