Skip to content

Instantly share code, notes, and snippets.

@sqtds
Created March 18, 2016 07:16
Show Gist options
  • Select an option

  • Save sqtds/3abd7179a3989ba0fa95 to your computer and use it in GitHub Desktop.

Select an option

Save sqtds/3abd7179a3989ba0fa95 to your computer and use it in GitHub Desktop.
同步于异步的区别
/** 同步代码
* 判断url中的城市否是和info实体中城市符合(包含百强县判断)
*
* @return
* @author LZ
*/
private boolean isAdaptCity(DispLocal city, List<DispLocal> dispLocalFullList) {
if (city == null || CollectionUtils.isEmpty(dispLocalFullList)) {
return false;
}
for (DispLocal dispLocal : dispLocalFullList) {
if (dispLocal.getDispLocalID() == city.getDispLocalID()) {
return true;
}
DispLocal newDispLocal = top100CountyService.checkTopDisplayLocal(dispLocal.getDispLocalID());
if (newDispLocal != null) {
if (newDispLocal.getDispLocalID() == city.getDispLocalID()) {
return true;
}
// 是百强县,需要遍历之前的id
int oldDispLocalId = top100CountyService.getOldTopDisplayLocal(newDispLocal.getDispLocalID());
List<DispLocal> oldListDispLocal = dispLocalService.loadDispLocalFullPath(oldDispLocalId);
for (DispLocal oldDisp : oldListDispLocal) {
if (oldDisp.getDispLocalID() == city.getDispLocalID()) {
return true;
}
}
}
}
return false;
}
/** 异步代码
* 判断url中的城市否是和info实体中城市符合(包含百强县判断)
*
* @return
* @author LZ
*/
private Task<AsynResult<AsyncContext, Boolean>> isAdaptCityTask(DispLocal city, List<DispLocal>
dispLocalFullList, AsyncContext context) {
if (city == null || CollectionUtils.isEmpty(dispLocalFullList)) {
return Task.value(new AsynResult<>(context, false));
}
List<Task<AsynResult<AsyncContext, DispLocal>>> newDispLocalTasks = new ArrayList<>();
for (DispLocal dispLocal : dispLocalFullList) {
if (dispLocal.getDispLocalID() == city.getDispLocalID()) {
return Task.value(new AsynResult<>(context, true));
}
Task<AsynResult<AsyncContext, DispLocal>> newDispLocalTask = top100CountyService.checkTopDisplayLocal
(context, dispLocal.getDispLocalID());
newDispLocalTasks.add(newDispLocalTask);
}
if (newDispLocalTasks.isEmpty()) {
return Task.value(new AsynResult<>(context, false));
}
return Tasks.par(newDispLocalTasks).flatMap(asynResults -> {
List<Task<AsynResult<AsyncContext, Integer>>> oldDispLocalIdTasks = new ArrayList<>();
for (AsynResult<AsyncContext, DispLocal> asynResult : asynResults) {
DispLocal newDispLocal = asynResult.getResult();
if (newDispLocal != null) {
if (newDispLocal.getDispLocalID() == city.getDispLocalID()) {
return Task.value(new AsynResult<>(context, true));
}
// 是百强县,需要遍历之前的id
Task<AsynResult<AsyncContext, Integer>> oldDispLocalIdTask = top100CountyService
.getOldTopDisplayLocal(context, newDispLocal.getDispLocalID());
oldDispLocalIdTasks.add(oldDispLocalIdTask);
}
}
if (oldDispLocalIdTasks.isEmpty()) {
return Task.value(new AsynResult<>(context, false));
}
return Tasks.par(oldDispLocalIdTasks).flatMap(asynResults1 -> {
List<Task<AsynResult<AsyncContext, List<DispLocal>>>> oldListDispLocalTasks = new ArrayList<>();
for (AsynResult<AsyncContext, Integer> asynResult : asynResults1) {
Integer oldDispLocalId = asynResult.getResult();
Task<AsynResult<AsyncContext, List<DispLocal>>> oldListDispLocalTask = dispLocalService
.loadDispLocalFullPath(context, oldDispLocalId);
oldListDispLocalTasks.add(oldListDispLocalTask);
}
if (oldListDispLocalTasks.isEmpty()) {
return Task.value(new AsynResult<>(context, false));
}
return Tasks.par(oldListDispLocalTasks).flatMap((asynResults2) -> {
for (AsynResult<AsyncContext, List<DispLocal>> result2 : asynResults2) {
List<DispLocal> oldListDispLocal = result2.getResult();
for (DispLocal oldDisp : oldListDispLocal) {
if (oldDisp.getDispLocalID() == city.getDispLocalID()) {
return Task.value(new AsynResult<>(context, true));
}
}
}
return Task.value(new AsynResult<>(context, false));
});
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment