java8 Steam实战

作者: 罗志贇 | 来源:发表于2017-12-13 01:02 被阅读0次

java8 Steam实战

假定选定一组专辑,找出其中所有长度大于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循环.

    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;
    }

第三步,将川籍转化成一个曲目的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中的值转换成一个列表

    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());
    }

相关文章

  • java8 Steam实战

    java8 Steam实战 假定选定一组专辑,找出其中所有长度大于1分钟的曲目名称 第一步要修改的是for循环. ...

  • 新年第一本书

    java8实战下周写总结

  • java8 资料收集

    1.跟上Java8 - 带你实战Java8 https://zhuanlan.zhihu.com/java8 王爵...

  • 表达的梯子20201210

    最近看《Java8 实战》这本书关于Lambda表达式的内容(《Java8 实战》这是一本计算机编程方面的书,其中...

  • Java8实战-中文版.pdf 免费下载

    下载地址:Java8实战-中文版.pdf

  • Lambda重构设计模式

    引言: 最近回看了一遍等书,加上平时自己function编程写的很多,写...

  • Java8 使用(上)

    本文主要总结了《Java8实战》,适用于学习 Java8 的同学,也可以作为一个 API 手册文档适用,平时使用时...

  • Java8 使用(下)

    本文主要总结了《Java8实战》,适用于学习 Java8 的同学,也可以作为一个 API 手册文档适用,平时使用时...

  • java8新特性及实战视频教程完整版视频

    java8新特性及实战视频教程完整版视频,需要的联系qq:1244610964

  • Java8中的并行流

    此笔记是我在阅读《Java8实战》时的一些记录。 Java8中增加了流(stream)的概念,为数据的处理带来了很...

网友评论

    本文标题:java8 Steam实战

    本文链接:https://www.haomeiwen.com/subject/pyioixtx.html