【问题标题】:Setting HashMap value via forLoop from Alternate Array of Strings通过 forLoop 从备用字符串数组设置 HashMap 值
【发布时间】:2016-11-18 18:24:54
【问题描述】:

我在一个表单中有三个“集合”String

1. Set<String> genderSet 
    sort:bestsellerRating:gender:Female,:bestsellerRating:gender:Male
2. Set<String> ageSet
    sort:bestsellerRating:age:0 - 6 Months, :bestsellerRating:age:6 - 12 Months :bestsellerRating:age:12 - 14 Months
3. Set<String> priceSet
    sort:bestsellerRating:price:£0-£19.99, :bestsellerRating:price:£200-£299.9

想要创建一个返回string 的函数,类似于以下内容:

Output: sort:bestsellerRating:gender:Female:gender:Male:age:0 - 6 Months:age:6 - 12 Months:age:12 - 14 Months:price:£0-£19.99:price:£200-£299.9

不想玩字符串,因为它不是一个好方法。 原因:genderSet、ageSet 和 priceSet 可以是:分隔的任何内容

希望使用HashMap 来实现这一点 我想实现这样的目标:

public String getQuery(final Form Form)
    {
        private static final String FACET_SEPARATOR = ":";

        final Map<String, Set<String>> queryMap = new HashMap<String, Set<String>>();

        final Set<String> giftFinderQuerySet = new HashSet<String>();

        final Set<String> valueSet = new HashSet<String>();

        final Set<String> genderSet = form.getGenderSet();  

        final Set<String> ageSet = form.getAgeSet();

        final Set<String> priceSet = form.getPriceSet();


for (final String gender : genderSet) 
    {
        final String[] genderList = gender.split(FACET_SEPARATOR);// This will bring first- [sort, bestsellerRating, gender, Female]  at one time, then [bestsellerRating, gender, Male] later in the next loop

        for (final String genderSplittedValue : genderList)
        {
        //valueSet.add(genderList[+1]); 
                queryMap.put(genderSplittedValue, valueSet); // Issue here: Need the map to be formed like this: queryMap(sort, bestSelling), queryMap(gender, [Male,Female])

        }


    }

for (final String age : ageSet) 
    {
        final String[] ageList = age.split(FACET_SEPARATOR);//Similar list like genderList 

        for (final String ageSplittedValue : ageList)
        {
                queryMap.put(genderSplittedValue, ageList[+1]); // Similar issue like above

        }


    }

for (final String price : priceSet) 
    {
        final String[] priceList = price.split(FACET_SEPARATOR);//Similar list like genderList 

        for (final String priceSplittedValue : priceList)
        {
                queryMap.put(priceSplittedValue, priceList[+1]); // Similar issue like above

        }


    }

现在,一旦我们准备好地图,接下来的代码就没有问题了

for (Map.Entry<String,Key> entry : queryMap.keySet()) 
    {
        String key = entry.getKey();
        String value = entry.getValue();
        giftFinderQuerySet.add(key+FACET_SEPARATOR+value);
    }

for (final String query : giftFinderQuerySet)
    {
        searchQuery = searchQuery.concat(query);
    }
    return searchQuery;
    }//End of method

需要帮助:需要这样形成地图:queryMap(sort, bestSelling), queryMap(gender, [Male,Female]), queryMap(age, [0 - 6 Months, 6 - 12 个月, 12 - 14 个月]), queryMap(价格, [£0-£19.99,£200-£299.9])

【问题讨论】:

  • 问题是什么?
  • queryMap.put(genderSplittedValue, valueSet); // 这里的问题:key 不应该有 bestsellerRating,所以需要替换这条线并需要帮助。这样就形成了正确的地图

标签: java for-loop hashmap logic


【解决方案1】:

已经得到解决方案,为了实现输出,重写了以下方法:

private String getGiftFinderQuerySet(final GiftFinderForm giftFinderForm)
    {
        String searchQuery = StringUtils.EMPTY;
        final Set<String> giftFinderQuerySet = new LinkedHashSet<String>();

        final Set<String> ageSet = giftFinderForm.getAgeSet();
        final Set<String> priceSet = giftFinderForm.getPriceSet();
        if (giftFinderForm.getGenderSet() != null && !(giftFinderForm.getGenderSet().isEmpty()))
        {
            final Set<String> genderSet = giftFinderForm.getGenderSet();
            for (final String gender : genderSet)
            {
                final String[] genderList = gender.split(FACET_SEPARATOR);// This will bring first- [sort, bestsellerRating, gender, Female]  at one time, then [bestsellerRating, gender, Male] later in the next loop
                for (int keyIndex = 0; keyIndex < genderList.length - 1; keyIndex++)
                {
                    if (keyIndex != (genderList.length - 1))
                    {
                        keyIndex = keyIndex + keyIndex;
                    }
                    final int valueIndex = keyIndex + 1;

                    giftFinderQuerySet.add(genderList[keyIndex] + FACET_SEPARATOR + genderList[valueIndex]);

                }
            }
        }

        if (giftFinderForm.getAgeSet() != null && !(giftFinderForm.getAgeSet().isEmpty()))
        {
        for (final String age : ageSet)
        {
            final String[] ageList = age.split(FACET_SEPARATOR);
            for (int i = 0; i < ageList.length - 1; i++)
            {
                if (i != (ageList.length - 1))
                {
                    i = i + i;
                }
                final int j = i + 1;
                giftFinderQuerySet.add(ageList[i] + FACET_SEPARATOR + ageList[j]);

            }
        }
        }
        if (giftFinderForm.getPriceSet() != null && !(giftFinderForm.getPriceSet().isEmpty()))
        {
        for (final String price : priceSet)
        {
            final String[] priceList = price.split(FACET_SEPARATOR);
            for (int i = 0; i < priceList.length - 1; i++)
            {
                if (i != (priceList.length - 1))
                {
                    i = i + i;
                }
                final int j = i + 1;
                giftFinderQuerySet.add(priceList[i] + FACET_SEPARATOR + priceList[j]);
            }
        }
        }

        for (final String query : giftFinderQuerySet)
        {
            searchQuery = searchQuery.concat(query + FACET_SEPARATOR);
        }
        searchQuery = searchQuery.substring(0, searchQuery.length() - 1); //Removing the last FACET_SEPARATOR which will be the final query
        return searchQuery;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多