操纵数组的内容

时间:2017-09-02 10:53:56

标签: java arrays for-loop iterator iteration

我有一段代码,我试图操纵数组的内容

loopArrayValuesToRemove(mVal.getValues());

这里我试图删除值数组的内容

private Values[] loopArrayValuesToRemove(Values[] values) {

    List<Values> files = new ArrayList<>(Arrays.asList(values.clone()));
    Iterator<Values> iterator = files.iterator();
    while(iterator.hasNext()) {
        Values mVal = iterator.next();
        if(!mVal.isCheckedLocally()){
            iterator.remove();
        }
        // other operations
    }
    Values[] mvals = files.toArray(new Values[files.size()]);

    return mvals;
}
  1. 因为即使操纵Values[]我也在创建新对象, mVal.getValues()内容未被修改。
  2. 这是一个愚蠢的问题,但我对此感到困惑。因为我无法改变 响应服务器上的arrayList(mVal.getValues()

2 个答案:

答案 0 :(得分:2)

你必须把它写成

mVal.setValues(loopArrayValuesToRemove(mVal.getValues()));

由于Java按值传递引用,因此您无法在方法内更改数组本身。内容可以更改,但如果尺寸发生变化,则无法完成。

答案 1 :(得分:1)

据我了解您的问题,您的目标是从列表中删除isCheckedLocally()返回true的实例,

您可以使用自Java 8以来的Stream API。

mVal = mVal.stream()
    .filter(i -> i.isCheckedLocally())
    .collect(Collectors.toList());