Return 大多数人居住的城市 - stream()

Return city in which most people live - stream()

我有一个名为 Person (name,surname,city,age) 的 class,我向其中添加了 persons。

我必须找到居住人数最多的城市 - 在我的例子中是“Meerdonk”。我尝试使用 stream(),但我不知道如何使用。

这是我的代码:

 public static Optional<Person> getMostPopulateCity(List<Person> personList) {
     return personList.stream()
            .filter(person -> person.getCity()
            // here
            .max(Comparator.comparing(Person::getCity));
   }

// here,我不知道我应该怎么做才能得到我人口最多的城市,如果最大。可以使用,因为我想获得最大(人口最多的城市)。

有人可以解释一下我应该用什么来离开人口最多的城市吗?或者只是让我知道我做错了什么?

您可以使用 Collectors.groupingBy 按城市对人员进行分组,然后像这样提取人数最多的地图条目(假设城市是字符串):

return personList.stream()
        .collect(Collectors.groupingBy(Person::getCity)) // Map<String, List<Person>>
        .entrySet().stream()
        .max(Comparator.comparing(e -> e.getValue().size())) // Optional<Map.Entry<String, List<Person>>
        .map(Entry::getKey);

按照上面@Thomas的建议,使用分组收集器和计数收集器按城市收集人数,然后寻找计数值最大的城市:

         Optional<String> result = persons.stream()
                .collect(Collectors.groupingBy(Person::getCity, Collectors.counting())) // Map<String, Long>: Key -> city, Value -> count of persons with such city
                .entrySet().stream()
                .max(Map.Entry.comparingByValue()) // looking for highest count value
                .map(Map.Entry::getKey);