为了账号安全,请及时绑定邮箱和手机立即绑定

在对象列表中查找元素的最大大小

在对象列表中查找元素的最大大小

aluckdog 2021-06-07 17:31:56
@Dataclass Person {    private String fname;    private String lname;    private List<String> friends;    private List<BigDecimal> ratings;    ...}@Dataclass People {    private List<Person> people;    ...}假设我有上述课程,并且需要弄清楚一个人拥有的最多朋友数量是多少。我知道 pre-streams 的做法......通过循环列表中的每个元素并检查friends.size() 是否大于当前存储的最长列表的数量。有没有办法用流简化代码?像这个答案?
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

根据依赖于 的大小的比较器计算Person包含的最大值:PeoplePerson.getFriends()


Optional<Person> p = people.getPeople()

                           .stream()

                           .max(Comparator.comparingInt(p -> p.getFriends()

                                                           .size()));

请注意,您还可以仅检索不与 Person 关联的朋友的最大数量:


OptionalInt maxFriends = people.getPeople()

                               .stream()

                               .mapToInt(p -> p.getFriends()

                                               .size())

                               .max();



查看完整回答
反对 回复 2021-06-10
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您可以在Person类中声明以下方法:


public int getNumberOfFriends(){

   return friends.size();

}

然后在这样的流中使用它:


Optional <Person> personWithMostFriends = people.stream().max(Comparator.comparingInt(Person::getNumberOfFriends));

通过这种方法,您将获得Person最多朋友的对象,而不仅仅是某人建议的最大朋友数。


查看完整回答
反对 回复 2021-06-10
?
ibeautiful

TA贡献1993条经验 获得超5个赞

你的问题已经回答了。但我添加这个是为了一件事。如果您的人员列表很大,并且您有多核电脑并且您想有效地使用它,那么请使用parallelstream()。


得到人:


Person person = people.getPeople()

.parallelStream()

.max(Comparator.comparingInt(p-> p.getFriends().size()))

.orElse(null);

获取尺寸:


int size = people.getPeople()

.parallelStream()

.mapToInt(p -> p.getFriends().size())

.max().orElse(0);


查看完整回答
反对 回复 2021-06-10
  • 3 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信