我正在研究具有此代码的代码:
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);
}
我只是想知道此代码中的return
和break
语句是否以任何方式彼此不同。因为我在此代码之外测试了一个类似的示例,return
和break
都停止了循环并终止了该函数。
答案 0 :(得分:0)
break
仅停止循环; return
会停止整个方法。
break
和return
这样的并置使得很难遵循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;
}
我会说这更容易理解(虽然稍微冗长一点)因为它正在分离出正在进行的不同事情:你正试图找到匹配的股票代码;如果你发现了,做其他的事情。将所有这些混合到一个循环中会混淆这种意图。