2017-04-26 44 views
0

所以我有一個對象(飲料)與成分的地圖,我想通過它們的列表。挑選包含全部或一個但不是更多的對象?

我想找到任何飲料,只作爲我搜索的成分,而不是那些有任何其他成分。

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; 
       } 
      } 
     } 
    } 
} 

編輯:我添加了一些更多的代碼,多一些信息,我想acomplish

+1

而你的問題是... –

+0

我想找到任何飲料,只有我搜索的成分,而不是有任何其他成分的飲料。 –

+0

如果你只是獲得密鑰,你爲什麼使用一個入口集?什麼是正則表達式? – failedProgrammer

回答

0

我最終搞清楚如何使它工作的幫助表示感謝。

相關問題