简体   繁体   English

递归时出错,但包含另一个列表的对象列表

[英]Having Error while recurssing though A list of Objects that contains another List

I have a class in Java which has an object 我在Java中有一个对象的类

List<GroupNavigationItemSRO> children

Now Every GroupNaviagationItemSRO has the same List 现在,每个GroupNaviagationItemSRO都有相同的列表

List<GroupNavigationItemSRO> children

NOw i want to iterate through every GroupNavigationSRO and populate a List of String . 现在我想遍历每个GroupNavigationSRO并填充String列表。 Currently i am trying to do that like this 目前,我正在尝试这样做

void getNavItems(List<GroupNavigationItemSRO> items,List<String> nitems){
        System.out.println("PRINT");
        for(GroupNavigationItemSRO item : items) {
            nitems.add(item.getUrl());
            System.out.println(item.getUrl());
           // g.add(item.getUrl());
            System.out.println("PRINT");
            List<GroupNavigationItemSRO> nextItem = item.getChildren();
            if (nextItem  != null && nextItem.size()>0) {
                getNavItems(nextItem,nitems);
            }
        }

    }

When i only print the objects ,it doesn't give any errors But as soon as i try and add to the List the recurssion stops 当我只打印对象时,它不会给出任何错误,但是一旦我尝试将其添加到列表中,递归就会停止

nitems.add(item.getUrl())

Why is this happening . 为什么会这样呢? Here's the entire java file in case its helpful 这是整个Java文件,以防它有所帮助

@Service("labelSearchService")
public class LabelSearchServiceImpl extends AbstractSearchService {
private static final String                version = SearchVersion.VERSION_2.getValue();

private static final Logger                LOG     = LoggerFactory.getLogger(LabelSearchServiceImpl.class);

private static final String          EXPIRY_SET        = "expiry";
private static final String          DATA_SET          = "data";

@Autowired
@Qualifier("searchServiceFactory")
private ISearchServiceFactory searchServiceFactory;

@Autowired
IAerospikeTopSellingBrandsCacheService topSellingBrandsCacheService;

@Autowired
private LabelSearchCacheServiceImplFactory labelSearchCacheServiceImplFactory;

@Autowired
AerospikeGuidedResponse aerospikeGuidedResponse ;

List<String> g = null;


@Override
public SearchSRO getSolrResponse(KeyGenerator keyGenerator, String queryFromBrowser, String searchTerm, Integer productCategoryId, int start, int number, String sortBy,
    String userZone, String vertical, String clickSrc, boolean isSpellCheckEnabled, String categoryURL, boolean isNested) throws SearchException, ShardNotFoundException, IllegalAccessException {
    String originalKeyword = searchTerm;

    searchTerm = SearchUtils.modifySearchTerm(searchTerm);
    SearchSRO sro = new SearchSRO();
    boolean isPartialSearch = SearchUtils.isPartialSearchEnabled();
    keyGenerator.setPartialSearch(SearchUtils.isPartialSearchEnabled());
    LabelNodeSRO labelNode = SearchUtils.getLabelNodeByNodePath(categoryURL);
    // for 'ALL' categories labelNode would be null.
    LOG.info("categoryURL : " + categoryURL);
    if (ALL.equals(categoryURL)) {
        if (number == 0 && !CacheManager.getInstance().getCache(SearchConfigurationCache.class).getBooleanProperty(SearchProperty.ALLOW_ZERO_RESULT_REQUESTS)) {
            return new SearchSRO();
        }
        sro = labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getSearchBinResultsForAllLabels(keyGenerator, queryFromBrowser, searchTerm, labelNode, start, number, sortBy, userZone, vertical,
                isPartialSearch, isSpellCheckEnabled, originalKeyword, false, isNested);
    } else if (labelNode != null) {
        sro = getSearchProducts(keyGenerator, queryFromBrowser, searchTerm, null, null, labelNode, start, number, sortBy, userZone, isPartialSearch, isSpellCheckEnabled,
                originalKeyword, isNested, false,categoryURL);
    } else {
        throw new SearchException("Search was hit without selecting any category");
    }

    // this is the minimum number to results that should match for results to be shown on 'people who search this bought this widget'

    SearchConfigurationCache cache = CacheManager.getInstance().getCache(SearchConfigurationCache.class);

    if ((ClickSourceType.PWSTBT_WIDGET.getValue()).equalsIgnoreCase(clickSrc) && sro.getNoOfMatches() < cache.getIntegerProperty(SearchProperty.BEST_SELLER_MINIMUM_RESULTS)) {

        LOG.info("The minimum number of results to match for PWSTBT widget are " + cache.getIntegerProperty(SearchProperty.BEST_SELLER_MINIMUM_RESULTS)
                + " but number of matched results are " + sro.getNoOfMatches());
        sro = new SearchSRO();

    }

    return sro;
}

@Override
public SearchSRO getSolrResponseForMobile(KeyGenerator keyGenerator, String queryFromBrowser, String searchTerm, Integer productCategoryId, int start, int number,
        String sortBy, String userZone, String vertical, String clickSrc, boolean isBinSearch, int noOfResultsPerBin, boolean isSpellCheckEnabled, boolean isPartialSearch,
        String categoryURL) throws SearchException, ShardNotFoundException, IllegalAccessException {
    String originalKeyword = searchTerm;
    searchTerm = SearchUtils.modifySearchTerm(searchTerm);
    SearchSRO sro = new SearchSRO();
    isPartialSearch = isPartialSearch && SearchUtils.isPartialSearchEnabled();

    // this is to disable partial search in case of PWSTBT
    if (ClickSourceType.PWSTBT_WIDGET.getValue().equalsIgnoreCase(clickSrc)) {

        isPartialSearch = false;

    }
    LabelNodeSRO labelNode = SearchUtils.getLabelNodeByNodePath(categoryURL);
    // for 'ALL' categories labelNode would be null
    if (ALL.equals(categoryURL)) {
        if (number == 0 && !CacheManager.getInstance().getCache(SearchConfigurationCache.class).getBooleanProperty(SearchProperty.ALLOW_ZERO_RESULT_REQUESTS)) {
            return new SearchSRO();
        }
        // Response for Search result page in mobile - same as web.
        sro = labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getSearchBinResultsForAllLabels(keyGenerator, queryFromBrowser, searchTerm, labelNode, start, number, sortBy, userZone, vertical,
                isPartialSearch, isSpellCheckEnabled, originalKeyword, true, false);
    } else if (labelNode != null) {
        sro = getSearchProducts(keyGenerator, queryFromBrowser, searchTerm, null, null, labelNode, start, number, sortBy, userZone, isPartialSearch, isSpellCheckEnabled,
                originalKeyword, false, true,categoryURL);
    } else {
        throw new SearchException("Search was hit without selecting any category");
    }

    // this is the minimum number to results that should match for results to be shown on 'people who search this bought this widget'

    SearchConfigurationCache cache = CacheManager.getInstance().getCache(SearchConfigurationCache.class);

    if ((ClickSourceType.PWSTBT_WIDGET.getValue()).equalsIgnoreCase(clickSrc) && sro.getNoOfMatches() < cache.getIntegerProperty(SearchProperty.BEST_SELLER_MINIMUM_RESULTS)) {
        LOG.info("The minimum number of results to match for PWSTBT widget are " + cache.getIntegerProperty(SearchProperty.BEST_SELLER_MINIMUM_RESULTS)
                + " but number of matched results are " + sro.getNoOfMatches());
        sro = new SearchSRO();
    }

    return sro;

}

@Autowired
private IUserPersonaSegmentService           personaSegmentService;

@Autowired
private IContextHolder<SearchRequestContext> ctxProvider;

private boolean isClientPersonaEnabled(SearchRequestContext ctx) {
    SearchConfigurationCache cache = CacheManager.getInstance().getCache(SearchConfigurationCache.class);
    String clientsEnabled = cache.getProperty(SearchProperty.PERSONA_CLIENTS_ENABLED);
    String client = ctx.req.getContextSRO().getAppIdent();

    return !StringUtils.isEmpty(client) && !StringUtils.isEmpty(clientsEnabled) && Pattern.matches("(?i).*\\b" + client + "\\b.*", clientsEnabled);
}

protected UserSegmentDTO setupPersonalizationContext(LabelNodeSRO labelNode, String searchTerm, String sortBy) {
    SearchRequestContext ctx = ctxProvider.getContext();

    if (ctx == null || ctx.req == null) {
        LOG.warn("No Request Context found");
        return null;
    }

    SearchConfigurationCache cache = CacheManager.getInstance().getCache(SearchConfigurationCache.class);

    // check if Personalization is enabled
    if (labelNode == null || !cache.getBooleanProperty(SearchProperty.PERSONA_SEARCH_ENABLED) || StringUtils.isEmpty(searchTerm)
            || !SolrSortCategory.RELEVANCY.getValue().equalsIgnoreCase(sortBy) || !isClientPersonaEnabled(ctx)) {
        LOG.debug("Personalization not enabled");
        return null;
    }

    LOG.info("Trying to set up personalization context");

    // setup the context for later use
    ctx.personaSegments = personaSegmentService.getUserSegments(ctx.req.getUserTrackingId(), labelNode.getNodePath());

    return ctx.personaSegments;
}

@Override
public SearchSRO getSearchProducts(KeyGenerator keyGenerator, String queryFromBrowser, String searchTerm, Integer campaignId, ProductCategorySRO pc, LabelNodeSRO labelNode,
        int start, int number, String sortBy, String userZone, boolean isPartialSearch, boolean isSpellCheckEnabled, String originalKeyword, boolean isNested, boolean isMobile,String categoryURL)
 throws SearchException, ShardNotFoundException, IllegalAccessException {
    LOG.info("------------------Product category page---------------");
    // build cache key considering campaign id
    keyGenerator.setCampaignId(String.valueOf(campaignId));
    // Search results will vary based on isNested flag even for exact same keywords hence, when we cache
    // we cache both results with different key
    keyGenerator.setNested(isNested);

    SearchConfigurationCache cache = CacheManager.getInstance().getCache(SearchConfigurationCache.class);

    LOG.info("sortBy : " + sortBy + ", personalization Enabled : " + cache.getBooleanProperty(SearchProperty.PERSONA_SEARCH_ENABLED) + ", labelNode : " + labelNode);

    // try to set persona context
    keyGenerator.setPersonaSegment(setupPersonalizationContext(labelNode, searchTerm, sortBy));

    SearchSRO searchSRO = labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getSearchProducts(keyGenerator, queryFromBrowser, searchTerm, campaignId, pc, labelNode, start, number, sortBy, userZone, isPartialSearch,
            isSpellCheckEnabled, originalKeyword, isNested, isMobile,categoryURL);

    /*SearchCoreContext coreContext = CoreContextHolderThreadLocal.getContext();

    if (coreContext != null) {
       if (coreContext.getCategoryUrlUsed().equalsIgnoreCase("ALL")) {
           String cacheKey = keyGenerator.buildKey();
           try {
               final AerospikeClient aClient = AerospikeClientFactory.getInstance();
               LOG.info("Clearing Cache as Category redirected was ambiguous so redirected to ALL and removing key " + cacheKey);
               aClient.delete(null, new Key("search", EXPIRY_SET, cacheKey));
               aClient.delete(null, new Key("search", DATA_SET, cacheKey));
           } catch (AerospikeException e) {
               e.printStackTrace();
           }
       }
    }*/
    return searchSRO;
}

@Override
public FilterListSRO getFiltersForProducts(Integer categoryId, Integer campaignId, String q, String keyword, boolean partialSearch, boolean isBrand, String categoryUrl,
        String userZone, HyperlocalCriteria hyperlocalCriteria, Set<Integer> pinCodes, GetFiltersRequest request) throws SearchException, ShardNotFoundException {
    String key = new KeyGenerator(String.valueOf(categoryId), String.valueOf(campaignId), q, keyword, partialSearch, null, categoryUrl, version, userZone, hyperlocalCriteria, pinCodes).buildFilterKey();
    if (campaignId != null) {
        LOG.info("Get Filters for Campaign Products wrt : " + key);
    }

    FilterListSRO filterListSRO =  labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getFiltersForProducts(key, categoryId, campaignId, q, keyword, partialSearch, isBrand, categoryUrl, userZone, hyperlocalCriteria, pinCodes,request);
    return filterListSRO;
}

@Override
public FilterListSRO getFiltersForProducts(Integer categoryId, Integer campaignId, String q, String keyword,
        boolean partialSearch, boolean isBrand, String categoryUrl, String userZone,
        HyperlocalCriteria hyperlocalCriteria, Set<Integer> pinCodes)
                throws SearchException, ShardNotFoundException {
    return getFiltersForProducts(categoryId, campaignId, q, keyword, partialSearch, isBrand, categoryUrl, userZone, hyperlocalCriteria, pinCodes,null);
}

@Override
public FilterListSRO getFilterValuesForFilter(String categoryId, String campaignId, String q, String keyword, boolean partialSearch, String filterName, String fullQ,
        String categoryUrl, String[] filtersToFetch, String userZone, HyperlocalCriteria hyperlocalCriteria, Set<Integer> pinCodes) throws SearchException, NumberFormatException, ShardNotFoundException {
    String uniqueFilterKey = new KeyGenerator(categoryId, campaignId, q, keyword, partialSearch, filterName, categoryUrl, version, userZone, hyperlocalCriteria, pinCodes).buildFilterKey();
    String[] filterNames = filterName.split(",");
    FilterListSRO filterListSRO =  labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getFilterValuesForFilter(uniqueFilterKey, categoryId, campaignId, q, keyword, partialSearch, filterNames, categoryUrl, filtersToFetch,
            userZone, hyperlocalCriteria, pinCodes);
    /*SearchCoreContext coreContext = CoreContextHolderThreadLocal.getContext();
    if (coreContext != null) {
        if (coreContext.getCategoryUrlUsed().equalsIgnoreCase("ALL")) {
            String cacheKey = uniqueFilterKey.concat(".FilterSRO");
            try {
                final AerospikeClient aClient = AerospikeClientFactory.getInstance();
                LOG.info("Clearing Cache as Category redirected was ambiguous so redirected to ALL and removing key " + cacheKey);
                aClient.delete(null, new Key("search", EXPIRY_SET, cacheKey));
                aClient.delete(null, new Key("search", DATA_SET, cacheKey));
            } catch (AerospikeException e) {
                e.printStackTrace();
            }
        }
    }*/
    return filterListSRO;
}

@Override
public GroupNavigationSRO getGroupNavigation(KeyGenerator keyGenerator, String keyword, String q, String categoryUrl, Integer campaignId, boolean isSpellCheck, String userZone) throws IllegalAccessException {
    GroupNavigationSRO sro = new GroupNavigationSRO();
    try {
        ProductCategoryCache categoryCache = CacheManager.getInstance().getCache(ProductCategoryCache.class);

        LabelNodeSRO labelNode = ALL.equals(categoryUrl) ? null : categoryCache.getLabelForLabelPath(categoryUrl);

        if (!ALL.equals(categoryUrl) && labelNode == null) {
            LOG.error("Invalid label : " + categoryUrl);
            return null;
        }

        // try to setup persona context - using sort to relevancy since group left nav doesn't change with sortBy
        keyGenerator.setPersonaSegment(setupPersonalizationContext(labelNode, keyword, SolrSortCategory.RELEVANCY.getValue()));

        sro = labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getGroupNavigation(keyGenerator, keyword, q, categoryUrl, campaignId, isSpellCheck, userZone);

        /*SearchCoreContext coreContext = CoreContextHolderThreadLocal.getContext();

        if (coreContext != null) {
            if (coreContext.getCategoryUrlUsed().equalsIgnoreCase("ALL")) {
                String cacheKey = keyGenerator.buildKey().concat(".GroupNavigationSRO");
                try {
                    final AerospikeClient aClient = AerospikeClientFactory.getInstance();
                    LOG.info("Clearing Cache as Category redirected was ambiguous so redirected to ALL and removing key " + cacheKey);
                    aClient.delete(null, new Key("search", EXPIRY_SET, cacheKey));
                    aClient.delete(null, new Key("search", DATA_SET, cacheKey));
                } catch (AerospikeException e) {
                    e.printStackTrace();
                }
            }
        }*/

    } catch (SearchException e) {
        LOG.error("Error in fetching GroupSRO: ", e);
    }
    return sro;
}

@Override
public QueryResponse setCategoryFilterQueryAndExecute(SearchCriteria sc, Integer id) throws SearchException {
    labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().setCategoryFilterQuery(sc, id);
    return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().executeQuery(sc.buildQuery(), id);
}

@Override
public Long getProductCategoryCount(Integer categoryId, String categoryUrl) {
    Long count = CacheManager.getInstance().getCache(ProductCategoryCache.class).getCategoryCountByUrl(categoryUrl);
    if (count == null) {
        count = new Long(0);
    }
    LOG.info("Product Category Counts for CategoryUrl: " + categoryUrl + " = " + count);
    return count;
}

@Override
public List<TopSellingProductCategorySRO> getTopSellingProductsforCategories(List<Integer> categoryIds, List<String> categoryUrls) {
    List<TopSellingProductCategorySRO> topSellingProductCategorySROs = new ArrayList<TopSellingProductCategorySRO>();
    for (String categoryUrl : categoryUrls) {
        try {
            TopSellingProductCategorySRO topSellingProductCategorySRO = null;
            Integer searchId = ShardResolverService.getSearchIdByLabel(categoryUrl);
            QueryResponse rsp = searchServiceFactory.getSearchService(SearchVersion.VERSION_2.getValue()).getTopProductsInfoById(searchId,
                    CacheManager.getInstance().getCache(SearchConfigurationCache.class).getIntegerProperty(SearchProperty.MAX_TOP_SELLING_PRODUCTS_PER_CATEGORY));
            List<Long> pogIds = SearchUtils.extractTopProductsByCategoryId(rsp);
            if (pogIds != null && !pogIds.isEmpty()) {
                topSellingProductCategorySRO = new TopSellingProductCategorySRO(categoryUrl, pogIds);
                topSellingProductCategorySROs.add(topSellingProductCategorySRO);
            }
        } catch (Exception e) {
            LOG.error("Unable to get Top Selling Products for categoryId: " + categoryUrl + ", Exception:" + e.getMessage());
        }
    }
    return topSellingProductCategorySROs;
}

@Override
public List<TopSellingBrandSRO> getTopSellingBrandsforCategories(List<Integer> categoryIds, List<String> categoryUrls) {
    List<TopSellingBrandSRO> topSellingBrandSROs = new ArrayList<TopSellingBrandSRO>();
    for (String categoryUrl : categoryUrls) {
        TopSellingBrandSRO topSellingBrandSRO = topSellingBrandsCacheService.getTopSellingBrandsByUrl(categoryUrl);
        if (topSellingBrandSRO != null) {
            topSellingBrandSROs.add(topSellingBrandSRO);
        }
    }
    return topSellingBrandSROs;
}

@Override
public List<TopSellingBrandSRO> getAllTopSellingProducts(){
    List<TopSellingBrandSRO> topSellingBrandSROs = topSellingBrandsCacheService.getAllTopSellingProducts();
    return topSellingBrandSROs;
}

@Override
public FacetSRO getFacets(String cachekey, String keyword, String queryFieldName, String[] facetFields, Map<String, List<String>> filterMap, int number) throws SearchException {

    // update values for mainCategoryXpath & categoryXpath fields
    /*if(SolrFields.CATEGORY_XPATH.equals(queryFieldName) || SolrFields.MAIN_CATEGORY_XPATH.equals(queryFieldName)) {
        String labelPath = SearchUtils.getLabelPathByUrl(keyword);
        keyword = String.valueOf(ShardResolverService.getSearchIdByLabel(labelPath));
    }*/
    for (String filterField : filterMap.keySet()) {
        if (SolrFields.CATEGORY_XPATH.equals(filterField) || SolrFields.MAIN_CATEGORY_XPATH.equals(filterField)) {
            List<String> searchIds = new ArrayList<String>();
            for (String val : filterMap.get(filterField)) {
                String labelPath = SearchUtils.getLabelPathByUrl(val);
                searchIds.add(String.valueOf(ShardResolverService.getSearchIdByLabel(labelPath)));
            }
            filterMap.put(filterField, searchIds);
        }
    }
    return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getFacets(cachekey, keyword, queryFieldName, facetFields, filterMap, number);
}

@Override
public FilterListSRO getSRPFilters(KeyGenerator keyGenerator, String q, String keyword, boolean partialSearch, String categoryUrl, String userZone, HyperlocalCriteria hyperlocalCriteria, Set<Integer> pinCodes) throws SearchException {
    if (StringUtils.isEmpty(keyword)) {
        LOG.error("Invalid parameters.");
        return null;
    }
    keyword = SearchUtils.modifySearchTerm(keyword);
    if (StringUtils.isEmpty(keyword)) {
        LOG.info(" Returning empty filters for empty keyword.");
        return new FilterListSRO();
    }
    return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getSRPFilters(keyGenerator.buildKey(), q, keyword, partialSearch, categoryUrl, userZone, hyperlocalCriteria, pinCodes);
}

@Override
public SearchSRO getSearchProducts(KeyGenerator keyGenerator, String queryFromBrowser, String searchTerm,
        Integer campaignId, ProductCategorySRO pc, LabelNodeSRO labelNode, int start, int number, String sortBy,
        String userZone, boolean isPartialSearch, boolean isSpellCheckEnabled, String originalKeyword,
        boolean isNested, boolean isMobile) throws SearchException, ShardNotFoundException, IllegalAccessException {
    // TODO Auto-generated method stub
    return getSearchProducts(keyGenerator, queryFromBrowser, searchTerm, campaignId, pc, labelNode, start, number, sortBy, userZone, isPartialSearch, isSpellCheckEnabled, originalKeyword, isNested, isMobile, null);
}

@Override
public String getmodelSearch(String query, String type) throws SearchException {

    return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getmodelSearch(query, type);
}

@Override
public String classifierResponse(String query, String type) throws SearchException {
    try {
        return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getClassifierResponse(query, type);
    } catch (JsonGenerationException e) {
        return e.getMessage();
    } catch (JsonMappingException e) {
        return e.getMessage();
    } catch (IOException e) {
        return e.getMessage();
    }
}

public GetGuidedSearchResponse getGuides(String query, String url) {

    if(!StringUtils.isEmpty(query) && !StringUtils.isEmpty(url) && url.equalsIgnoreCase("ALL"))
    {
        KeyGenerator keyGenerator = new KeyGenerator();
        keyGenerator.setQ("sNapDeAl.sEarcH.getGuides=" +"##"+ query+ "##"+ url);
        return labelSearchCacheServiceImplFactory.getSearchCacheServiceImpl().getGuides(keyGenerator, query, url);
    }   
    return null;
}   

public GetGuidedSearchResponse getFilteredGuides(String query ,GetGroupLeftNavResponse leftNavBarResponse) {    
    g=null;
    GroupNavigationSRO groups = leftNavBarResponse.getGroups();
    List<GroupNavigationItemSRO> items = groups.getItems() ;
//  List<String> nitems = getNavItems(items);
    List<String> nitems = null;
    getNavItems(items,nitems);
    System.out.println("SIZE" + nitems.size());
    List<String> navItems = new ArrayList<String>();
    System.out.println("GETTING GUIDED FILE FROM AEROSPIKE");
    List<String> guideItems = aerospikeGuidedResponse.getGuides(query);
    //HashMap<String,String> nodeUrlMapping = new HashMap<String,String>();
    if(guideItems.isEmpty())
    {
        System.out.println("\n\n\n\n" + "EMPTY GUIDED" + " \n\n\n\n\n");
    }
    guideItems.set(0, guideItems.get(0).trim());
    System.out.println("GUIDED RESPONSE");
    for(int i=0 ; i < guideItems.size() ;i ++)
    {
        System.out.println(guideItems.get(i));

    }
    /*for (int i =0 ;i < items.size() ;i++) {
        List<GroupNavigationItemSRO> children_items = items.get(i).getChildren();
        String s = items.get(i).getNodePath();
        String m = items.get(i).getUrl();
        System.out.println(s + "    " +  m);
        navItems.add(m);
        //nodeUrlMapping.put(s,m);
        for (int j=0;j<children_items.size();j++) { 
            String r = children_items.get(j).getNodePath();
            String n = children_items.get(j).getUrl();
            System.out.println(r +"    " +  n);
        //  nodeUrlMapping.put(r,n);
            navItems.add(n);
        }


    }*/
    System.out.println("ITEM RESPONSE");
    //navItems = g ;
    for(int i=0 ; i < navItems.size() ;i ++)
    {
        System.out.println(navItems.get(i));

    }
    List<String> filteredGuides = new ArrayList<String>();

    for(int i=0 ; i < guideItems.size() ;i++)
    {
        if(navItems.contains(guideItems.get(i)))
            filteredGuides.add(guideItems.get(i));
        else {

        }

    }
    System.out.println("NAV ITEMS" + navItems.size() + navItems.toString());
    System.out.println("GUIDE ITEMS" + filteredGuides.size() + filteredGuides.toString());
    List<WidgetEntity> entities = new ArrayList<WidgetEntity>();
/*  Iterator it = nodeUrlMapping.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry)it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
    }*/
    for(int i=0;i<filteredGuides.size();i++)
    {
        String guide = filteredGuides.get(i);
        guide = guide.trim();
        System.out.println(guide);
        LabelNodeSRO labelSRO = getLableSRO(guide);
        System.out.println(labelSRO.toString() + guide);
        WidgetEntity entity = new WidgetEntity();
        entity.setId(labelSRO.getUrl());
        entity.setName(labelSRO.getDisplayName());
        entity.setType("category");
        entities.add(entity);

    }
    System.out.println("ENTITIES DEtails" );
    GetGuidedSearchResponse response = new GetGuidedSearchResponse();
    for(int i =0 ;i<entities.size();i++)
    {
        System.out.println(entities.get(i).getId() + entities.get(i).getName() + entities.get(i).getType());
    //  System.out.println(nodeUrlMapping.get(entities.get(i).getId()));
    }
    response.setEntities(entities);
    return response;

}
LabelNodeSRO getLableSRO(String guide)
{
    System.out.println(guide + "GET");
    LabelNodeSRO label =SearchUtils.getLabelNodeByNodePath(guide);
    return label;


}

void getNavItems(List<GroupNavigationItemSRO> items,List<String> nitems){
    System.out.println("PRINT");
    for(GroupNavigationItemSRO item : items) {
        nitems.add(item.getUrl());
        System.out.println(item.getUrl());
       // g.add(item.getUrl());
        System.out.println("PRINT");
        List<GroupNavigationItemSRO> nextItem = item.getChildren();
        if (nextItem  != null && nextItem.size()>0) {
            getNavItems(nextItem,nitems);
        }
    }

}

} }

You could try something like this, when you return a list with all Strings, and if there are no more elments stop the recursivity and returns an empty list 当您返回包含所有字符串的列表时,如果没有更多元素停止递归并返回一个空列表,则可以尝试这样的操作

List<String> getNavItems(List<GroupNavigationItemSRO> items){
    List<String> results = new ArrayList();
    System.out.println("PRINT");
    if(items != null && !items.isEmpty()){
        for(GroupNavigationItemSRO item : items) {
            results.add(item.getUrl());
            System.out.println(item.getUrl());
            // g.add(item.getUrl());
            System.out.println("PRINT");
            results.addAll(getNavItems(item.getChildren()));
           }
        }
    }
    return results;
}

In getFilteredGuides() method you're passing nitems as null and this would cause NullPointerException . getFilteredGuides()方法中,您将nitems传递为null,这将导致NullPointerException

Just Pass it as the following: 只需将其传递如下:

List<String> nitems = new ArrayList<String>();
getNavItems(items,nitems);

Or you can add a check for null inside getNavItems() method and initialize it accordingly: 或者,您可以在getNavItems()方法中添加null检查,并相应地对其进行初始化:

void getNavItems(List<GroupNavigationItemSRO> items,List<String> nitems){

        if(nitems == null)
        {
            nitems = new ArrayList<String>();
        }
        System.out.println("PRINT");
        for(GroupNavigationItemSRO item : items) {
            nitems.add(item.getUrl());
            System.out.println(item.getUrl());
           // g.add(item.getUrl());
            System.out.println("PRINT");
            List<GroupNavigationItemSRO> nextItem = item.getChildren();
            if (nextItem  != null && nextItem.size()>0) {
                getNavItems(nextItem,nitems);
            }
        }

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM