Java8函数之旅 (三) 流的练习题

本文介绍了Java8中流的基础练习题,包括求和函数、艺术家信息转换、专辑筛选等。通过实例解析了如何利用map、flatMap、reduce和filter等流操作解决问题,并提供了详细的解题思路和参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础题

Question 1 (常用流操作)

  • 编写一个求和函数,计算流中所有数的和。例int addUp(Stream numbers)
  • 编写一个函数,参数为艺术家集合,返回一个字符串集合,其中包含了艺术家的姓名与国籍。(艺术家类名为Artist,里面有获得姓名与国籍的get方法getName()与getNationality())
  • 编写一个函数,参数为专辑集合,返回一个由 最多包含3首歌曲的专辑 组成的集合。(专辑类名为Album,里面包含了一个返回本专辑所有歌曲的集合的方法getTrackList())
  • Question 1 的参考思路

  • 编写一个求和函数,计算流中所有数的和。
    这道练习题要求计算流中所有的数的和,参数为流,返回他们的和,这其实就是要求我们重复实现类库中的sum()方法,那系列第二篇提到的reduce操作里面已经提到了,类库中的sum,max,min等一系列操作都是用reduce完成的,因此在这里我们也可以用reduce进行操作。参考代码如下
 public static int addUp(Stream<Integer> numbers){
        reutrn numbres.reduce(0,(x,y) -> x+y);
    }
  • 编写一个函数,参数为艺术家集合,返回一个字符串集合,其中包含了艺术家的姓名与国籍。
    这道题参数为艺术家集合,返回值为字符串,那么显然这是涉及到映射map的操作,但是要将一个艺术家元素映射成两个字符串(分别是这个艺术家的姓名与这个艺术家的国籍),那么就要涉及到flatMap了,flatMap方法可以用Stream替换值,然后在将多个Stream链接成一个Stream,对于本题来说,使用艺术家姓名与艺术家国籍的流替换掉艺术家,再将这些流链接到一起即可。
    更具体一点的说法,假设有2个艺术家,分别是来自中国的张三与来自美国的jack,那么直接使用map映射返回的结果是2个流,格式大约为这样:[张三,中国],[jack,美国],使用flatMap就可以将这两个流合并,于是格式就变成了[张三,中国,jack,美国],符合题目中的返回一个字符串集合。
    参考代码如下
  • public static List<String> getArtistNamesAndNations(List<Artist> artists){
            return artists.stream()
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值