遍历实例变量的ArrayList

时间:2019-02-22 04:21:48

标签: java

我想知道如何遍历以下Arraylist。

public class FruitHandler {

    private ArrayList<Fruits> fruit;
    private ArrayList<Integer> fruitUID= new ArrayList<>();

    public static FruitHandler getInstance() {
            return instance;
    }

    public void addFruit(Fruit fruit) {
        this.fruitUID.add(fruit.getfruitUID());
        this.fruit.add(fruit);
    }
}

我想做的是遍历fruitUID并返回该水果类的实例,该实例存储在ArrayList<Fruits> fruit中,该实例与我的给定UID相匹配。

例如,我有一个fruitUID = 10,我想引用存储在ArrayList<Fruits> fruit中并有其fruitUID = 10的水果类实例。

2 个答案:

答案 0 :(得分:5)

如果您要检索给定一个fruitUID的Fruit实例,那么您可能需要一个Map<Integer, Fruit>

您还可以只拥有Fruit个实例的列表,并使用流和过滤器仅查找具有指定fruitUID的单个实例。

如果绝对必须使用两个列表,则需要找到指定的fruitUID的索引,并从另一个具有相同索引的列表中提取Fruit

编辑::如果要使用地图:

private Map<Integer, Fruits> fruits = new HashMap<>();

public void addFruit(Fruit fruit) {
    fruits.put(fruit.getfruitUID(), fruit);
}

public Fruit findFruit(Integer fruitUID) {
    return fruits.get(fruitUID);
}

答案 1 :(得分:1)

@Jason指出的解决方案将使您的问题更加容易,但是如果您急于考虑使用快速解决方案,则可以使用以下代码(性能不佳

public class FruitHandler {

    private ArrayList<Fruits> fruit;
    private ArrayList<Integer> fruitUID= new ArrayList<>();

    public static FruitHandler getInstance() {
            return instance;
    }
    public void addFruit(Fruit fruit) {
        this.fruitUID.add(fruit.getfruitUID());
        this.fruit.add(fruit);
    }
    public Fruit findFruitByFruitUID(Integer fruitUID){
             for(Fruit fr: fruit){
                     if(fr.getfruitUID()==fruitUID){
                      return fr;
                      }
             }
        return null;
         }
}