首页 > 解决方案 > 如何使用java存储、检索和更改值

问题描述

我想将项目编号、CO 编号、CO 行、数量保存在数组中,然后将该数组保存在数组列表中。对于数组列表中的某些记录,我想根据 CO 编号和 CO 行检索该记录并更改它的数量。最简单的方法是什么?也许存储在数组中并将这些数组存储在数组列表中并不是一个好主意。我正在集成系统中进行此开发。因此存在只能使用单个 Java 类文件等限制。

这是我到目前为止所尝试的。

//Loop arraylist

for (int i = 0; i < g_COList.size(); i++) {
        //Get array
        String[] CO = (String[]) g_COList.get(i);

        coNumber = CO[0];
        coLine = CO[1];

        if (coNumber.equals("567780000") && coLine .equals("10")) {
            g_COList.set(i, new String[] { "45", "567780000", "10", "5"});
        }

    }

谢谢

标签: javaarraysarraylist

解决方案


您可以在 ArrayList 中存储普通数组,这绝对没问题,并且您可以使用 C 风格的 for 循环来提高性能,因为与将数据存储在列表内的对象中然后遍历数组列表相比,此代码会更快。如果您不在大型数据集上进行操作,我建议您在代码中利用面向对象的编程。以下是您可以编写的代码。\n

你的物品类别

@lombok.Getter
@lombok.Setter
@lombok.Builder
public class Items {

    private long itemNumber;

    private long coNumber;

    private long coLine;

    private long quantity;

    }

这就是您遍历项目列表的方式

我假设 getData() 方法会为您提供项目列表,然后对其进行处理。我正在创建另一个项目列表,其中包含您的新值。

    ArrayList<Items> list = getData();

    List<Items> newList = list.stream()
            .filter(items -> items.coNumber == 567780000L && items.coLine == 10L)
            .map( items -> Items.builder()
                           .itemNumber(items.itemNumber)
                           .coNumber(items.coNumber)
                           .coLine(items.coLine)
                           .quantity(45L) //new quantity
                           .build())
            .collect(Collectors.toList());

您也可以对源流进行更改,但不建议这样做,您应该避免修改流源的状态。从流包文档的非干扰部分我们可以读到:非干扰文档

无论如何,代码如下

list.stream()
            .filter(items -> items.coNumber == 567780000L && items.coLine == 10L)
            .forEach(items -> items.setQuantity(45L));

推荐阅读