我有三个ArrayLists,两个是字符串,最后一个是整数。
第一个ArrayList包含特定产品的特定Variant(variantArray),如可乐的风味变体,第二个包含Unit(unitArray),其中包含的单位大小(80oz,500mL,1L)产品,最后一个是数量*(quantityArray)。
这是我使用的课程。
public class CurrentOrderClass {
//ArrayLists
private ArrayList<String> variantArray = new ArrayList<String>();
private ArrayList<String> unitArray = new ArrayList<String>();
private ArrayList<Integer> quantityArray = new ArrayList<Integer>();
//TODO ArrayList functions
public ArrayList<String> getUnitArray() {
return unitArray;
}
public void setUnitArray(ArrayList<String> unitArray) {
this.unitArray = unitArray;
}
public void addToUnitArray(String unit){
this.unitArray.add(unit);
}
public ArrayList<Integer> getQuantityArray() {
return quantityArray;
}
public void setQuantityArray(ArrayList<Integer> quantityArray) {
this.quantityArray = quantityArray;
}
public void addToQuantityArray(int quantity){
this.quantityArray.add(quantity);
}
public ArrayList<String> getVariantArray() {
return variantArray;
}
public void setVariantArray(ArrayList<String> variantArray) {
this.variantArray = variantArray;
}
public void addToVariantArray(String variantArray){
this.variantArray.add(variantArray);
}
@Override
public String toString() {
return "[ product=" + productName + ", variants=" +
variants + " , unit=" + unit + " , quantity=" + quantity + "]";
}
}
我接受用户输入,因此用户选择Variant,Unit和Quantity,然后将输入存储在各自的ArrayLists中。
但是,当用户输入一个已存在于ArrayLists中但仅具有不同数量的Variant和Unit时,我在更新ArrayLists时遇到问题。我想要做的不是添加新条目,而是以这样的方式更新当前的ArrayLists:当用户输入变量和单位但数量不同时,我只更新数量。
我尝试的第一件事是使用indexOf(userInputVariant)
查看输入是否已经存在于ArrayList中,然后检查它是否与indexOf(userInputUnit)
匹配,这意味着用户输入已经重复。但是,我不认为indexOf在该逻辑上运行,它返回的值是它找到userInputVariant
字符串的第一个实例的值。
我尝试的第二次尝试是为每个循环使用a,但是,我再一次很难恢复我想要的索引。
我实例化名为CurrentOrderClass
的{{1}}的对象,并使用“Grape”预先填充其variantArray的前10个元素
之后,我尝试了这个if-else语句:
currentOrder
但是,如上所述,indexOf返回一个int,它首先找到我告诉它要查找的String,我认为它不会检查它是否存在于该特定位置之后。
我尝试的第二个代码是使用for-each并从那里返回位置,但同样,它只返回position = 0.
if( (currentOrder.getVariantArray().indexOf(product.getVariant()[variantPosition]) ==
currentOrder.getUnitArray().indexOf(product.getUnit()[position])
我正在考虑在for-each循环中运行for-each循环,但我不知道如何让它返回我想要的正确位置。
有没有人知道如何让它正常工作?我需要通过我的unitArray“交叉引用”它来返回我在variantArray中多次出现的项目的位置。感谢。
答案 0 :(得分:3)
在这种情况下,一个for循环就足够了。
这有点像:
isExist = false;
for(index = 0; index<variantArray.size(); index++){
if(variantArray.get(index) == userChoiceVariant &&
unitArray.get(index) == userChoiceUnit){
//update quantity
isExist = true;
}
}
if(!isExist){
//insert order
}
答案 1 :(得分:0)
我达到的第一个解决方案是:“搜索与变量数组中的用户输入匹配的所有索引,将其存储在另一个ArrayList<Integer>
中,将其命名为matchingVariants
,然后对于每个matchingVariants
中的整数获取单位列表的位置。如果其中一个项匹配,则应更新,否则插入。
但是,我认为更好的解决方案是将Variants和Units包装在一个类中,例如Product
包含属性String variant
和String unit
。实施equals
方法,您可以忘记您的变体和单位列表,只有一个ArrayList<Product>
下一步,我会使用Map
作为键Product
作为键,Integer
作为值。所以我可以更新Map
而不是拥有你拥有的所有列表。