选择包含全部或一个但不是更多的对象?

时间:2017-04-26 22:52:44

标签: java list hashmap set

所以我有一个对象(饮料)和成分地图,我想通过他们的列表。

我想找到任何饮料,只作为我寻找的成分,而不是任何其他成分。

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

编辑:我添加了一些代码和更多关于我想要实现的内容的信息

1 个答案:

答案 0 :(得分:0)

我最终想知道如何让它工作,谢谢你的帮助。