|  | @@ -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) {
 |