Java:是否可以在两个数组中比较String值,如果它们匹配,则在第一个数组中增加一个int值?

时间:2018-12-05 19:18:08

标签: java arrays string arraylist

我想通过添加一个由String name, double price, int quantity组成的代表不同项目的数组来构建一个arraylist。如果添加的项目与arraylist中已经存在的项目相同,则应增加quantity而不是添加。

我的想法是检查两个数组之间的索引1的值是否匹配,如果匹配,则在第一个数组中递增索引3的值。这可以用Java完成吗?您如何将新数组与列表中已有的数组进行比较?

4 个答案:

答案 0 :(得分:3)

正确的方法是构建一个保存这些值的POJO

class Purchase {

    String name;
    // all other

}

并用equals/hashCodename覆盖price(不要quantity,因为这是一个可更新的字段),然后将这些实例快速放入Set搜索。其余的可能很明显。

答案 1 :(得分:2)

您可能应该检查模型并使用一个对象。

创建一个包含三个属性的类。然后是Map<String, YourObject>。然后,当您要添加对象时,只需先进行测试

if(map.containsKey(objectName)) {
    YourObject object = map.get(objectName);
    object.setQuantity(object.getQuantity() + 1);
}

编辑与@Eugene讨论

YourObject objectToAdd = ...
Map<String, YourObject> map = new HashMap<>();
...
YourObject objectInMap = map.get(objectName);
if(objectInMap != null) {
    // increase Quantity in objectInMap 
} else {
    //Object not existing in the map, never added
    //manage initial quantity here
    map.put(objectToAdd.getName(), objectToAdd)
}

答案 2 :(得分:1)

我同意其他答案:步骤1是定义一个表示此类SalesActivity的类。

但是与其他方法相比,我建议:将此类对象的所有字段定为final。含义:当售出X件商品时,无需递增 amount字段...只需创建一个 new SalesActivity。

您只需将这些新对象添加到列表中。当您想知道“天哪,售出了X个”时,您只需迭代该列表,对于任何X条目,您都将添加quantity信息。

当然,这不是您在新手练习中建模的方式。但这就是您应该在现实世界中做事的方式。您避免携带状态的对象。就像您的银行帐户:这不是更改其状态的对象。它不过是一系列不断增加的“帐户活动”。换句话说:帐户对象中没有字段“帐户余额”。但是存入清单和付款清单,余额不过是所有这些事件在特定时间点的“总和”。

答案 3 :(得分:0)

嗯,好吧...我考虑到已经存在的答案写了代码(很无聊)...

您在这里:

public class Helper {

    private static List<MyData> addNewData(List<MyData> listOfData, MyData myData) {

        for (int i = 0; i <= listOfData.size(); i++) {
            if (listOfData.get(i).getName().equalsIgnoreCase(myData.getName())) {
                listOfData.get(i).setQuantity(listOfData.get(i).getQuantity() + myData.getQuantity());
                break; //the data with the same name is found
            } else {
                listOfData.add(myData);
                break; //also necessary break!!!
            }

        }
        return listOfData;
    }

    private static void printData(List<MyData> myData){
        myData.forEach(System.out::println);
        System.out.println("______________________");
    }

    public static void main(String[] args) {

        //test data
        List<MyData> testData = new ArrayList<>();
        testData.add(new MyData("chair", 15.0, 44));
        testData.add(new MyData("bottle", 0.25, 119));


        System.out.println("Original data: "); printData(testData);
        //try to add new item (with new name)
        addNewData(testData, new MyData("glass", 1.1, 10));
        //print the new data
        System.out.println("New List: "); printData(testData);

        //try to add new 'existing' item
        addNewData(testData, new MyData("chair", 17.0, 4));
        //print the new - new data
        System.out.println("NEW new data: "); printData(testData);


    }

    static class MyData {

        private String name;
        private double price;
        private int quantity;

        //constructor without parameters
        public MyData() {
            this.setName("");
            this.setPrice(0.0d);
            this.setQuantity(0);
        }

        //constructor with parameters
        public MyData(String name, double price, int quantity) {
            this.setName(name);
            this.setPrice(price);
            this.setQuantity(quantity);
        }

        //getters, setters...
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getQuantity() {
            return quantity;
        }

        public void setQuantity(int quantity) {
            this.quantity = quantity;
        }

        @Override
        public String toString(){
            return this.name + ", " + this.price + ", " + this.quantity;
        }
    }
}

输出为:

Original data: 
chair, 15.0, 44
bottle, 0.25, 119
______________________
New List: 
chair, 15.0, 44
bottle, 0.25, 119
glass, 1.1, 10
______________________
NEW new data: 
chair, 15.0, 48
bottle, 0.25, 119
glass, 1.1, 10
______________________

请注意,椅子的价格不变(也可以这样做...)!