java - 在 LinkedList 中搜索 "Ingredient"并将它们组合起来

标签 java linked-list

嘿,我目前有一个特定的链接列表,其中包含所有可用的成分。

     private LinkedList<Ingredient> ingredients = new LinkedList<Ingredient>();

成分包含以下值

ingredients.add (new Ingredient("Capsicum", 0.50, TOPPING));
ingredients.add (new Ingredient("Olives", 1.50, TOPPING));
ingredients.add (new Ingredient("Jalapenos", 1.00, TOPPING));
ingredients.add (new Ingredient("Beef", 2.75, TOPPING));
ingredients.add (new Ingredient("Pepperoni", 2.50, TOPPING));

一切进展顺利,直到我必须返回一个包含超过 1 个顶部的字符串值。我尝试找到下面配料的方法。

public String toppings(){
    for (Ingredient ingredient : ingredients){
        if (ingredient.hasType(Kitchen.TOPPING)){
            ingredients.add(ingredient);
            return ingredient.ingtoString();
        }
    }
    return "no toppings";
}

这仅适用于已输入的 1 种成分,我不确定如何修复它。

public String toppingFound(String topping){
    String s = "";
    s += " " + topping;
    return s;
}

这是由 toppings() 调用的函数

所以我的问题是,如果还不清楚我将如何修改,以便它打印多种找到的成分,而不仅仅是一种。

最佳答案

为什么你的方法不起作用:

for (Ingredient ingredient : ingredients){
    if (ingredient.hasType(Kitchen.TOPPING)){
        ingredients.add(ingredient);

这里,不知道为什么,你尝试将你在成分列表中找到的成分第二次添加到列表末尾

        return ingredient.ingtoString();

在这里,您立即返回找到的第一个成分的名称,而不是将其名称连接到您想要构建的字符串。

正确的实现是

public String toppings() {
    StringBuilder builder = new StringBuilder();
    for (Ingredient ingredient : ingredients){
        if (ingredient.hasType(Kitchen.TOPPING)) {
            if (builder.length() > 0) {
                builder.append(", ");
            }
            builder.append(ingredient.ingtoString());
        }
    }
    return builder.toString();
}

但是现在做你想做的事情最简单的方法是使用流:

String toppingIngredientNames = 
    ingredients.stream()
               .filter(i -> i.hasType(Kitchen.TOPPING))
               .map(Ingredient::ingtoString())
               .collect(Collectors.joining(", "));

注意:您应该在接口(interface)而不是实现上进行编程。变量的类型应该是 List<Ingredient> ,不是LinkedList<Ingredient> 。您应该选择 ArrayList 作为实现,因为 LinkedList 基本上在您可以想象的每个合理用例中都比 LinkedList 慢。 (顺便说一句,正在考虑弃用 LinkedList)。

关于java - 在 LinkedList 中搜索 "Ingredient"并将它们组合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43821916/

相关文章:

java - 创建一个可用的 jar

c - 链表查询

c++ - 插入节点时对链表进行排序

java - 宽度 (-1) 和高度 (-1) 不能 <= 0

c++ - 关于链表的指针问题

java - Java中无法正确排序到达时间

c - 使用 fgets() 时将值放入链表 header 中

java - Favicon 在 FireFox 中不显示

java - 检查数组列表中的重复项

java - 他们是如何在 Android 上制作 imo/ebuddy 应用程序的?