《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
阅读全文
0 0
- 《java8函数式编程》第三章课后习题
- Scala函数式编程课后习题答案(第三章)(更新ing)
- 编程珠玑第三章课后习题
- Scala函数式编程课后习题答案(第五章)
- Scala函数式编程课后习题答案(第六章)
- 《UNIX 网络编程》 第三章课后习题第三题
- 《UNIX 网络编程》 第三章课后习题第三题
- 第三章 课后编程
- Scala函数式编程课后习题答案(第四章)(更新ing)
- C++ Primer Plus 课后习题 第三章
- 算法导论课后习题解析 第三章
- 《学习opencv》第三章课后习题详解
- 《视觉SLAM》第三章课后习题
- 算法入门经典第三章课后习题
- 《Java程序设计》课后习题-第三章
- 爬格子呀--第三章课后习题
- Python核心编程(第三版)课后习题解答——第二章
- Python核心编程(第三版)课后习题解答——第四章
- Cassandra压实(一)
- java学习笔记(一)——对象
- 第一次开通博客
- 在Java的Set集合中放入自定义类
- 基于Docker的微服务架构-企业级服务集群实践(一)
- 《java8函数式编程》第三章课后习题
- 分布式RPC框架性能大比拼
- 高性能网络编程(四)--TCP连接的关闭
- 用户输入的数字转化为二进制后中数字1的个数
- 【笔记】深入理解 java 虚拟机---虚拟机内存溢出
- Python基础-分布式进程 Master/Worker模型
- JVM内存管理机制
- SSH项目整合步骤
- RDD 转化为 DataFrame