【发布时间】:2017-09-24 13:02:06
【问题描述】:
所以我有一个带有成分图的对象(饮料),我想查看它们的列表。
我想找到仅作为我搜索的成分的任何饮料,而不是包含任何其他成分的饮料。
drinkA.ingredients("water","sugar","salt")
drinkB.ingredients("sugar","salt")
drinkC.ingredients("water")
drinkD.ingredients("sugar")
drinkE.ingredients("salt")
drinkF.ingredients("water","sugar")
drinkG.ingredients("water","salt")
所以,如果我寻找水和盐,我想看看
drinkC
drinkE
drinkG
这就是我所拥有的,但它只会给我提供含有我搜索过的成分的饮料等等。
public void findSearchResults(String searchRegex, Gui gui) {
if(searchRegex.equals("") || searchRegex == null){
return;
}
List<String> multiSearch = new ArrayList<String>();
if(searchRegex.contains(",")){
multiSearch = Arrays.asList(searchRegex.split(","));
}else{
multiSearch.add(searchRegex);
}
int originSize = multiSearch.size();
gui.drinksToDisplay = new ArrayList<Drink>();
for(Drink d : allDrinks){
int regexIn = 0;
List<String> tempStrs = new ArrayList<String>();
tempStrs.addAll(multiSearch);
if(gui.searchStyle.equals("Has only Ingredients")){
Map<String, String> ingreds = d.getIngredients();
Set<Entry<String, String>> ingredsSet = ingreds.entrySet();
Iterator<Entry<String, String>> ingredsIter = ingredsSet.iterator();
while(ingredsIter.hasNext()){
Entry<String, String> e = ingredsIter.next();
for(String s : tempStrs){
if(e.getKey().toLowerCase().contains(s.toLowerCase())){
tempStrs.remove(s);
regexIn++;
break;
}
}
if(regexIn == originSize && tempStrs.isEmpty()){
gui.drinksToDisplay.add(d);
break;
}
}
}
}
}
编辑:我添加了更多代码和更多关于我想要完成的信息
【问题讨论】:
-
你的问题是......
-
我想找到仅作为我搜索的成分的任何饮料,而不是包含任何其他成分的饮料。
-
如果您只获取密钥,为什么还要使用条目集?什么是正则表达式?
-
请提供其他代码
-
那么您的代码与您的问题有什么关系?它有什么问题吗?如果是这样,它们到底是什么?如果不是,它在那里做什么?寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误和重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。