《java8函数式编程》第三章课后习题

来源:互联网 发布:黄连和黄连 知乎 编辑:程序博客网 时间:2024/06/03 19:34

记录自己学习Lambda的拙劣过程,写博客完全是为了让自己把每个题目都过一遍,其实这本书对应的GitHub上面,已经给出了各个题目的过程。


下面给出自己练习的痕迹。

1、常用流操作package java8;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;import java.util.Set;import java.util.stream.Collectors;import java.util.stream.Stream;/** * @Author: cxh * @CreateTime: 17/12/14 20:47 * @ProjectName: JavaBaseTest * <测试类></> */public class Test {    public static void main(String[] args) {        //1.1求和        Stream<Integer> stream;        List<Integer> list=new LinkedList<>();        list.add(1);list.add(2);list.add(4);        stream=list.stream();        System.out.println(addUp(stream));        System.out.println("---------1.1输出结束--------------");        //1.2返回字符串列表,包含艺术家的姓名和国籍        List<String> nameAndOriginal;        ArrayList<Artist> nao=new ArrayList<>();        nao.add(new Artist("Holino",null,"Landon"));        nao.add(new Artist("Luciba",null,"China"));        nao.add(new Artist("Luciyi",null,"Australia"));        nameAndOriginal=getNameAndOriginal(nao);        for(String str:nameAndOriginal)            System.out.println(str);        System.out.println("---------1.2输出结束-----------------");        //1.3返回最多包含3首歌曲的专辑组成的列表        Set<Album> albums;        ArrayList<Album> albumArrayList=new ArrayList<>();        for(int i=1;i<6;i++){            albumArrayList.add(new Album("qisi",getTracks(i),getArtists()));        }        Set<Album> albumSet=getAlbums(albumArrayList);        for(Album a:albumSet){            System.out.println("name is: "+a.getName()+"tracks`size is:"+a.getTracks().size());        }        System.out.println("---------1.3输出结束-----------------");    }    //1.1计算流中所有数字之和    private static  int addUp(Stream<Integer> numbers){        return numbers.reduce(0,(acc,elemeent)->(acc+elemeent)).intValue();    }    //1.2返回字符串列表,包含艺术家的姓名和国籍    private static List<String> getNameAndOriginal(ArrayList<Artist> list){        List<String> res;        res=list.stream()        .map(artist -> "name is: "+artist.getName()+" and original is: "+artist.getOriginal()+" ,")        .collect(Collectors.toList());        return res;    }    //1.3返回最多包含3首歌曲的专辑组成的列表    private static Set<Album> getAlbums(ArrayList<Album> list){        Set<Album> res;        res=list.stream()                .filter(album -> album.getTracks().size()<=3)                .collect(Collectors.toSet());        return res;    }    //获取艺术家列表    private static ArrayList<Artist> getArtists(){        ArrayList<Artist> res=new ArrayList<>();        for(int i=0;i<5;i++){            ArrayList<String> members=new ArrayList<>();            members.add("lili");            members.add("zhouqing");            res.add(new Artist("ladygaga",members,"europe"));        }        return res;    }    //获取歌曲列表    private static ArrayList<Track> getTracks(int count){        ArrayList<Track> tracks=new ArrayList<>();        for(int i=0;i<count;i++){            Track track=new Track("qicaishiguang",10);            tracks.add(track);        }        return tracks;    }}//输出结果:7---------1.1输出结束--------------name is: Holino and original is: Landon ,name is: Luciba and original is: China ,name is: Luciyi and original is: Australia ,---------1.2输出结束-----------------name is: qisi and  the track`s size is:2name is: qisi and  the track`s size is:3name is: qisi and  the track`s size is:1---------1.3输出结束-----------------Process finished with exit code 0


2、迭代。将for循环的外部迭代改为内部迭代 。package java8;import java.util.ArrayList;/** * @Author: cxh * @CreateTime: 17/12/14 20:47 * @ProjectName: JavaBaseTest * <测试类></> */public class Test {    public static void main(String[] args) {        ArrayList<Artist> artists=getArtists();        //输出artists        System.out.println("---------以下为各个Artist中的成员个数----------");        for(Artist a:artists){            System.out.print(a.getMembers().size()+",");        }        System.out.println();        System.out.println("---------下面为使用Lambda表达式求各个Artist中成员的总数--------");        int res=artists.stream().map(artist -> artist.getMembers().size())                .reduce(0,(acc,members)->(acc+members))                .intValue();        System.out.println(res);    }    //获取艺术家列表    private static ArrayList<Artist> getArtists(){        ArrayList<Artist> res=new ArrayList<>();        for(int i=0;i<6;i++){            ArrayList<String> members=new ArrayList<>();            for(int j=-1;j<i;j++){                members.add("lili"+i);            }            res.add(new Artist("ladygaga"+i,members,"europe"+i));        }        return res;    }}//运行结果---------以下为各个Artist中的成员个数----------1,2,3,4,5,6,---------下面为使用Lambda表达式求各个Artist中成员的总数--------21Process finished with exit code 0


6、求一个字符串中小写字母的个数。package java8;import java.util.ArrayList;/** * @Author: cxh * @CreateTime: 17/12/14 20:47 * @ProjectName: JavaBaseTest * <测试类></> */public class Test {    public static void main(String[] args) {        String str="123qwe";        long res;        res=str.chars().filter(c->c>=97 &&c<=122)                .count();        System.out.println(res);         /**         * String的chars()方法分析         */        int[] test=str.chars().toArray();        for(int i:test)            System.out.println(i);        /**         * 输出:         * 49          * 50         * 51         * 113         * 119         * 101         *         * 所以,从输出结果可以知道:chars()方法,返回的是字符串中所有字符对应的assii码值.         * 通过chars()源码可以知道:JDK1.8才开始有这个方法.它返回的是int类型的数据流:IntStream         */    }}//输出结果3Process finished with exit code 0


7、求字符串列表中:包含最多小写字母的字符串。package java8;import java.util.ArrayList;import java.util.Comparator;/** * @Author: cxh * @CreateTime: 17/12/14 20:47 * @ProjectName: JavaBaseTest * <测试类></> */public class Test {   public static void main(String[] args) {        ArrayList<String> list=new ArrayList<>();        for(int i=1;i<10;i++){            StringBuilder sb=new StringBuilder();            for(int j=0;j<=i;j++){                sb.append("d");            }            list.add(sb.toString());        }        String max=list.stream().max(Comparator.comparing(s ->getCount(s) )).get();        System.out.println(max);    }    /**     * 获取字符串str中包含的小写字母个数     * @param str     * @return     */    private static long getCount(String str){        return str.chars().filter(c->c>=97 && c<=122).count();    }}//输出结果ddddddddddProcess finished with exit code 0


原创粉丝点击