java8 Steam實戰(zhàn)

java8 Steam實戰(zhàn)

假定選定一組專輯,找出其中所有長度大于1分鐘的曲目名稱

    public Set<String> findLongTracks(List<Album> albums) {
        HashSet<Album> trackNames = new HashSet<Album>();
        for (Album album : albums) {
            for (Track track : album.getTrackList()) {
                if (track.getLength() > 60) {
                    String name = track.getName();
                    trackNames.add(name);
                }
            }
        }
      return trackNames;
    }

第一步要修改的是for循環(huán).

    public Set<String> findLongTracks(List<Album> albums) {
        HashSet<Album> trackNames = new HashSet<Album>();
        albums.stream()
          .forEach(album->{
            album.getTracks()
              .forEach(track ->{
                if(track.getLength()>60){
                  String name = track.getName();
                  trackNames.add(name);
                }
              })
          });
      return trackNames;
    }

第二步使用Stream操作

    public Set<String> findLongTracks(List<Album> albums) {
        HashSet<Album> trackNames = new HashSet<Album>();
        albums.stream()
          .forEach(album->{
            album.getTracks()
              .filter(track -> track.getLength()>60)
              .map(track -> track.getName())
              .forEach(name -> trackNames.add(name));
          });
      return trackNames;
    }

第三步,將川籍轉(zhuǎn)化成一個曲目的Stream,這里使用flatMap操作,把多個Stream合并成一個Stream并返回.

    public Set<String> findLongTracks(List<Album> albums) {
        HashSet<Album> trackNames = new HashSet<Album>();
        albums.stream()
          .flatMap(album->album.getTracks())
          .filter(track -> track.getLength()>60)
          .map(track -> track.getName())
          .forEach(name -> trackNames.add(name));
      return trackNames;
    }

第四步,Stream中有collect操作可以將Stream中的值轉(zhuǎn)換成一個列表

    public Set<String> findLongTracks(List<Album> albums) {
       return albums.stream()
          .flatMap(album->album.getTracks())
          .filter(track -> track.getLength()>60)
          .map(track -> track.getName())
          .forEach(name -> trackNames.add(name))
          .collect(toSet());
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容