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