【问题标题】:Manipulating contents of array操作数组的内容
【发布时间】:2018-02-11 06:34:11
【问题描述】:

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

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. 这是一个愚蠢的问题,但我被困在这个问题上。因为我无法改变 响应 (mVal.getValues()) 服务器中的 arrayList

【问题讨论】:

  • 你的问题是什么?
  • 问题是关于修改mVal.getValues()内容的引用
  • 您将不得不比这更好地解释自己。你想发生什么,正在发生什么?
  • 我会尝试: ....mVal.getValues() 有一个值数组 .... 根据我正在修改其内容的条件,在问题中我通过转换为列表,因为数组具有固定大小,但问题是,虽然列表已修改原始 mVal.getValues() 保持不变
  • 您是否尝试过使用有效元素的完整新列表而不是删除无效元素?应该更快,更短的时间完成

标签: java arrays for-loop iterator iteration


【解决方案1】:

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

您可以从 Java 8 开始使用 Stream API。

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

【讨论】:

  • 还有//其他操作你永远无法确定你的过滤器能不能解决所有问题
【解决方案2】:

你必须把它写成

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

由于 Java 按值传递引用,您无法在方法内更改数组本身。内容可以更改,但如果大小更改则无法更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多