JAva 8におけるforeachの理解

1347 ワード

Java 8 APIでは、Stream:Classes to support functional-style operations on streams of elements、such as map-reduce transformations on collectionsについて説明しています.どういう意味ですか.簡単に言えば、集合クラスの操作に特化したクラスです.コレクション操作では、コードの量を減らし、コードをより簡潔で美しくすることができます.
  ここでは主にStreamのforeachを理解します.
  私たちは以前listもforeachを使っていましたが、このようなものが多いです.for(String str:list)では、Streamはどのように使われていますか.次のようになります.
companyIdsFromDB.forEach(key -> {
    CompanyInfoEntity companyInfoEntity = companyInfoDAO.selectByCompanyId(key);
    companyInfoEntity.setFirmId(0L);
    companyInfoEntity.setGmtModified(new Date());
    companyInfoDAO.updateByPrimaryKeySelective(companyInfoEntity);
});

実は以前の遍歴方式とあまり違いはありませんが、実際には違います.
  Streamのforeachは、内部のオブジェクトを暗黙的にfinal型と見なしているため、外部変数の参照を変更することはできませんが、外部変数の参照の値を変更することができます.このように言うと理解しにくいかもしれませんが、外部変数の参照は変わらず、外部変数のアドレスは変わらないと理解され、感覚がはっきりします.したがって、参照タイプでは内部値を変更できます.
 実は値伝達と参照伝達の問題です.