list.stream().map().collect()の意味


list.stream().map().collect()の意味
起因:最近他の人のソースコードを勉強していますが、登録検証権限の時にこのようなコードを見ました。
List<Role> roles = roleDao.selectByUserId(user.getId());
List<Long> roleIds = roles.stream()
      .map(Role::getId)
      .collect(Collectors.toList());
バカな私はこれが1.8の新しい特性だと知っていますが、接触したことがないので、どういう意味なのか分かりません。検索したらここで記録してみます。上のコードを私達が熟知しているコードに変えたらこのように長いです。
List<Role> roles = roleDao.selectByUserId(user.getId());
List<Long> roleIds = new ArrayList<>();
for (Role role : roles) {
     
      roleIds.add(role.getId());
}
いくつか資料を調べたら、java 8 appiの方法で別の書き方があります。
List<Role> roles = roleDao.selectByUserId(user.getId());
List<Long> roleIds = roles.stream()
      .map(role -> role.getId())
      .collect(Collectors.toList());