for循环中返回和中断ifs之间的差异

时间:2017-10-14 20:56:55

标签: java android for-loop return break

我正在研究具有此代码的代码:

public void add(StockUpdate newStockUpdate) {

    for (StockUpdate stockUpdate : data) {
        if (stockUpdate.getStockSymbol().equals(newStockUpdate.getStockSymbol())) {
            if (stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
                return;
            }
            break;
        }
    }

    /* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
    this.data.add(0, newStockUpdate);
    notifyItemInserted(0);
}

我只是想知道此代码中的returnbreak语句是否以任何方式彼此不同。因为我在此代码之外测试了一个类似的示例,returnbreak都停止了循环并终止了该函数。

1 个答案:

答案 0 :(得分:0)

break仅停止循环; return会停止整个方法。

breakreturn这样的并置使得很难遵循add方法的逻辑。请考虑以下内容可能更容易理解:

public void add(StockUpdate newStockUpdate) {
  StockUpdate stockUpdate = findStockUpdateBySymbol(newStockUpdate.getStockSymbol());
  if (stockUpdate != null
      && stockUpdate.getPrice().equals(newStockUpdate.getPrice())) {
    return;
  }

  /* data.add mathod checks the new data against the existing data. If no change is found, the update is discarded. */
  this.data.add(0, newStockUpdate);
  notifyItemInserted(0);
}

// On non-android, it's easier to do this with a stream/findFirst.
private StockUpdate findStockUpdateBySymbol(StockSymbol sym) {
    for (StockUpdate stockUpdate : data) {
        if (stockUpdate.getStockSymbol().equals(sym)) {
            return stockUpdate;
        }
    }
    return null;
}

我会说这更容易理解(虽然稍微冗长一点)因为它正在分离出正在进行的不同事情:你正试图找到匹配的股票代码;如果你发现了,做其他的事情。将所有这些混合到一个循环中会混淆这种意图。