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);
我有一个名为 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);