面向对象的编程-Application 58

Previously on OOP:

In Clinic class, there are only two data structures storing object references. Some of the Streams can be started from either of these data structures, saving us trouble in figuring out which one is the appropriate structure. Furthermore, there are always more than one solutions to implement information query requirements.

第七项,也就是最后一项大作业是Social。

在整个project中,主的类是Social class,其他类都是辅助的类。addPerson()函数会创建Person类的实例,并且把object references加入到某种数据结构中。在Person类的几项attributes中,code具有unique性质,所以应该把Person类的object references存放在Map/ Set中。

刚刚才讲过“code具有unique性质”,但是如果code已经在数据结构中存在了,那么就要扔出一个PersonExistsException。另外,getPerson()方法返回的是一个含有指定Person信息的字符串,每个字段之间用空格分割。如果“查无此人”,就要扔出一个NoSuchCodeException。

下面是会被扔出的两个Exception的代码,这两个类是Project中已经编写好的,不需要各位宝宝修改。

只要注册为社交网络平台的用户,就能添加好友。addFriendship()会接收到A和B两个人的code,先要保证“查有此人”,再把A加入B的好友列表,把B加入A的好友列表中。也就是说,在Person类中还要追加一个attribute,类型是Collection

,用于存放当前Person的所有朋友。

listOfFriends()函数能查询给定Person的朋友列表。这个需求非常好实现,只要把Person类中、刚才创建的Collection

返回就行了。

friendsOfFriends()函数能查询给定Person的朋友的朋友的列表。而且在这个列表中,不包含参数中的给定Person。这个需求也不是非常复杂,本黄鸭觉得使用Stream的方法非常适合。把给定Person中的Collection

attribute作为source of Stream,然后调用flatMap()函数把所有Collection

类中的所有Collection

都拿出来,组成一个新的Stream

在secondLayerFriendsWithDuplication()中,有一个步骤是“.map(Person::toString)”,这是因为Social类的friendsOfFriends()函数的返回值是Collection类型的,所有Social类的函数头都不能擅自更改;而在题目中,又没有明确指明String和Person之间的关系,所以本黄鸭为了保证编译通过,就把Stream

map到了Stream类型。

本需求还是要找朋友的朋友,区别在于作为返回值的List中,不允许包含相同的元素,也就是具有unique性质,于是想到了Map/ Set。只要把刚才secondLayerFriendsWithDuplication()函数最后的collector从toList()变成toSet()就可以了。

欢迎使用本黄鸭编写的小程序~

微信公众号二维码:

你的每一个“好看”,都是对我的鼓励

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190113G0FLIB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券