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

Sti*_*ode 0 java java-stream

@Data
class Person {

    private String fname;
    private String lname;

    private List<String> friends;
    private List<BigDecimal> ratings;

    ...
}

@Data
class People {

    private List<Person> people;

    ...
}
Run Code Online (Sandbox Code Playgroud)

假设我有上述课程,并且需要弄清楚任何一个人拥有的朋友数量是多少.我知道前流的方式...通过循环遍历列表中的每个元素并检查friends.size()是否大于当前存储的最长列表的数量.有没有办法简化流的代码?像这样的回答

dav*_*xxx 7

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

Optional<Person> p = people.getPeople()
                           .stream()
                           .max(Comparator.comparingInt(p -> p.getFriends()
                                                           .size()));
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以仅检索没有与之关联的人员的最多朋友:

OptionalInt maxFriends = people.getPeople()
                               .stream()
                               .mapToInt(p -> p.getFriends()
                                               .size())
                               .max();
Run Code Online (Sandbox Code Playgroud)