【发布时间】: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