|
@@ -12,7 +12,6 @@ import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
@@ -26,18 +25,17 @@ public class FilterService {
|
|
|
private final ExecutorService pool = ThreadPoolFactory.filterPool();
|
|
|
|
|
|
public FilterResult filter(FilterParam param) {
|
|
|
- List<String> contentIds = contentFilter(param);
|
|
|
-
|
|
|
- return new FilterResult(contentIds);
|
|
|
+ return contentFilter(param);
|
|
|
}
|
|
|
|
|
|
- private List<String> contentFilter(FilterParam param) {
|
|
|
+ private FilterResult contentFilter(FilterParam param) {
|
|
|
+ FilterResult result = new FilterResult();
|
|
|
|
|
|
List<FilterStrategy> strategies = getStrategies(param);
|
|
|
CountDownLatch cdl = new CountDownLatch(strategies.size());
|
|
|
- List<Future<List<String>>> futures = new ArrayList<>();
|
|
|
+ List<Future<FilterResult>> futures = new ArrayList<>();
|
|
|
for (final FilterStrategy strategy : strategies) {
|
|
|
- Future<List<String>> future = pool.submit(() -> {
|
|
|
+ Future<FilterResult> future = pool.submit(() -> {
|
|
|
try {
|
|
|
return strategy.filter(param);
|
|
|
} finally {
|
|
@@ -53,22 +51,27 @@ public class FilterService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- List<List<String>> contentIds = new ArrayList<>();
|
|
|
- for (Future<List<String>> f : futures) {
|
|
|
+ List<List<String>> contentIdsList = new ArrayList<>();
|
|
|
+ List<Content> filterContents = new ArrayList<>();
|
|
|
+ for (Future<FilterResult> f : futures) {
|
|
|
try {
|
|
|
- contentIds.add(f.get());
|
|
|
+ FilterResult filterResult = f.get();
|
|
|
+ contentIdsList.add(filterResult.getContentIds());
|
|
|
+ filterContents.addAll(filterResult.getFilterContent());
|
|
|
} catch (Exception e) {
|
|
|
log.error("future get error ", e);
|
|
|
}
|
|
|
}
|
|
|
- if (CollectionUtils.isEmpty(contentIds)) {
|
|
|
- return Collections.emptyList();
|
|
|
+ if (CollectionUtils.isEmpty(contentIdsList)) {
|
|
|
+ return result;
|
|
|
}
|
|
|
- List<String> result = param.getContents().stream().map(Content::getId).collect(Collectors.toList());
|
|
|
- for (int i = 0; i < contentIds.size(); ++i) {
|
|
|
- result.retainAll(contentIds.get(i));
|
|
|
+ List<String> contentIds = param.getContents().stream().map(Content::getId).collect(Collectors.toList());
|
|
|
+ for (int i = 0; i < contentIdsList.size(); ++i) {
|
|
|
+ contentIds.retainAll(contentIdsList.get(i));
|
|
|
}
|
|
|
- return null;
|
|
|
+ result.setContentIds(contentIds);
|
|
|
+ result.setFilterContent(filterContents);
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
private List<FilterStrategy> getStrategies(FilterParam param) {
|