zoukankan      html  css  js  c++  java
  • java8函数式编程3

    从双层循环中筛选出目标,用到Stream API包括:

    flatMap : 用于Stream替换值,然后将多个Stream连接成一个Stream

    filter : 遍历数据并检查其中的元素

    map:将一个流中的值转换成一个新的流

    例如: 从不同专辑中找出歌曲时长超过1分钟的歌曲名称(1张专辑包含多个歌曲)

    1.先准备测试数据

    package com.ieou.h2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * created by wyz on 2020/4/23
     */
    public  class Album {
        private List<Track> track;
    
        public static class Track {
            private String name;
            private Integer length;
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public Integer getLength() {
                return length;
            }
    
            public void setLength(Integer length) {
                this.length = length;
            }
        }
    
        public List<Track> getTrack() {
            return track;
        }
    
        public void setTrack(List<Track> track) {
            this.track = track;
        }
    
        public List<Album> init() {
            List<Album> albums = new ArrayList<>();
            List<Track> tracks = new ArrayList<>();
    
            Track track = new Track();
            track.setName("a");
            track.setLength(10);
            tracks.add(track);
    
            Track track1 = new Track();
            track1.setName("b");
            track1.setLength(300);
            tracks.add(track1);
    
            Album album = new Album();
            album.setTrack(tracks);
            albums.add(album);
    
            return albums;
        }
    }
    

      

    2.

    package com.ieou.h2;
    
    import java.util.List;
    import java.util.Set;
    
    import static java.util.stream.Collectors.toSet;
    
    /**
     * created by wyz on 2020/4/23
     */
    public class TestJava8 {
    
        public static void main(String[] args) {
            /**
             * 从不同专辑中找出歌曲时长超过1分钟的歌曲名称(1张专辑包含多个歌曲)
             */
            List<Album> albums = new Album().init();
            Set<String> set = albums.stream().
                    flatMap(album -> album.getTrack().stream()).  //先把所有专辑的歌曲合并到一个列表中
                    filter(track -> track.getLength() > 60).      //筛选出时长超过60的歌曲
                    map(Album.Track::getName).collect(toSet());   //找出符合条件的歌曲名称并放入set集合
            System.out.println(set);
        }
    }
    

      

  • 相关阅读:
    表达式和计算的描述
    表达式和计算的描述
    递归算法浅谈
    编程基本功训练:流程图画法及练习
    【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
    VS2008下直接安装使用Boost库1.46.1版本号
    android关键组件service服务(一)
    U盘安装咱中国人自己的操作系统UbuntuKylin14.04LST(超具体原创图文教程)
    数据流图的画法
    匈牙利算法
  • 原文地址:https://www.cnblogs.com/wang-yaz/p/12762609.html
Copyright © 2011-2022 走看看