我有三个 ArrayList,两个是字符串,最后一个是整数。
第一个 ArrayList 包含特定 Product 的特定 Variant (variantArray),例如可乐的口味变体,第二个 ArrayList 包含 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,然后将输入存储在它们各自的 ArrayList 中。
但是,当用户输入 ArrayLists 中已存在但数量不同的 Variant 和 Unit 时,我在更新 ArrayLists 时遇到问题。我想要做的不是添加新条目,而是更新当前的 ArrayLists,这样当用户输入变体和单位但数量不同时,我只会更新数量。
我尝试的第一件事是使用 indexOf(userInputVariant)
查看输入是否已存在于 ArrayList 中,然后检查它是否与 indexOf(userInputUnit)
匹配>,这意味着用户输入已经重复。但是,我不认为 indexOf 运行在该逻辑上,它返回的值是它找到 userInputVariant
字符串的第一个实例的值。
我尝试的第二次尝试是使用 for each 循环,但是,我又一次很难正确返回我想要的索引。
我实例化了一个名为 currentOrder
的 CurrentOrderClass
对象,并用“Grape”预填充了其 variantArray 的前 10 个元素
在那之后,我尝试了这个 if-else 语句:
if( (currentOrder.getVariantArray().indexOf(product.getVariant()[variantPosition]) ==
currentOrder.getUnitArray().indexOf(product.getUnit()[position])
但是,如上所述,indexOf 在它第一次找到我告诉它要查找的字符串的位置返回一个 int,我认为它不会检查它是否存在于该特定位置之后。
我尝试的第二个代码是使用 for-each 并从那里返回位置,但同样,它只返回位置 = 0。
for( String Grape : currentOrder.getVariantArray() ){
Log.d("Angelo", "Retrived Element: " + Grape
+ " at position = " + currentOrder.getVariantArray().indexOf(Grape));
}
我目前正在考虑在 for-each 循环中运行 for-each 循环,但我不知道如何让它返回我想要的正确位置。
有没有人知道如何让它正常工作?我需要通过与我的 unitArray 进行“交叉引用”来返回在我的 variantArray 中多次出现的项目的位置。谢谢。
最佳答案
在这种情况下,一个 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
}
关于Android - 返回多次出现的 ArrayList 中项目的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984511/