加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 06:39:21 所属栏目:Java 来源:网络整理
导读: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: JavaBaseTe

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 stream;
List 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","China"));
    nao.add(new Artist("Luciyi","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 tracks size is:2 name is: qisi and the tracks size is:3
name is: qisi and the track`s size is:1
---------1.3输出结束-----------------

Process finished with exit code 0

import java.util.ArrayList;

/**

  • @Author: cxh
  • @CreateTime: 17/12/14 20:47
  • @ProjectName: JavaBaseTest
  • <测试类></>
    */

public class Test {
public static void main(String[] args) {
ArrayList 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,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,"europe"+i));
    }
    return res;
}

}

//运行结果
---------以下为各个Artist中的成员个数----------
1,2,3,4,5,6,---------下面为使用Lambda表达式求各个Artist中成员的总数--------
21

Process finished with exit code 0

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
    */
    }
    }

//输出结果
3

Process finished with exit code 0

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 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 &amp;&amp; c<=122).count();
}

}

//输出结果
dddddddddd

Process finished with exit code 0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读