如何获得给定数组列表的最大国家/地区
How do I get max country for a given arraylist
如何将结果集设置为 {GERMANY=3} 而不是 {GERMANY=3, POLAND=2, UK=3}
public class Student {
private final String name;
private final int age;
private final Country country;
private final int score;
// getters and setters (omitted for brevity)
}
public enum Country { POLAND, UK, GERMANY }
//Consider below code snippet
public static void main(String[] args) {
List<Student> students = Arrays.asList(
/* NAME AGE COUNTRY SCORE */
new Student("Jan", 13, Country.POLAND, 92),
new Student("Anna", 15, Country.POLAND, 95),
new Student("Helga", 14, Country.GERMANY, 93),
new Student("Leon", 14, Country.GERMANY, 97),
new Student("Chris", 15, Country.GERMANY, 97),
new Student("Michael", 14, Country.UK, 90),
new Student("Tim", 15, Country.UK, 91),
new Student("George", 14, Country.UK, 98)
);
// Java 8 code to get all countries code but
// How do I get the only country that has maximum students from ArrayList given above.
Map<Country, Long> numberOfStudentsByCountry =
students.stream()
.collect(groupingBy(Student::getCountry, counting()));
System.out.println(numberOfStudentsByCountry);
}
结果如下
{GERMANY=3, POLAND=2, UK=3}
我要像下面这样。
{GERMANY=3}
您可以使用 Stream.max
比较以下值进一步获得地图中出现频率最高的国家/地区:
Country mostFrequent = numberOfStudentsByCountry.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(Country.POLAND) // some default country
如果您只对单个 Map.Entry
感兴趣,可以使用
Map.Entry<Country,Long> mostFrequentEntry = numberOfStudentsByCountry.entrySet()
.stream()
.max(Map.Entry.comparingByValue()) // extensible here
.orElse(null); // you can default according to service
注意:这两个都应该具有足够的可扩展性,以便在您想要中断时向 Comparator
添加自定义逻辑两国的频率相等等联系。举例来说,这可能发生在示例数据中的 GERMANY 和 UK 之间。
Map.Entry<Country, Long> maxEntry = students.stream()
.collect(groupingBy(Student::getCountry, counting()))
.entrySet().stream().max(Map.Entry.comparingByValue()).get();
如何将结果集设置为 {GERMANY=3} 而不是 {GERMANY=3, POLAND=2, UK=3}
public class Student {
private final String name;
private final int age;
private final Country country;
private final int score;
// getters and setters (omitted for brevity)
}
public enum Country { POLAND, UK, GERMANY }
//Consider below code snippet
public static void main(String[] args) {
List<Student> students = Arrays.asList(
/* NAME AGE COUNTRY SCORE */
new Student("Jan", 13, Country.POLAND, 92),
new Student("Anna", 15, Country.POLAND, 95),
new Student("Helga", 14, Country.GERMANY, 93),
new Student("Leon", 14, Country.GERMANY, 97),
new Student("Chris", 15, Country.GERMANY, 97),
new Student("Michael", 14, Country.UK, 90),
new Student("Tim", 15, Country.UK, 91),
new Student("George", 14, Country.UK, 98)
);
// Java 8 code to get all countries code but
// How do I get the only country that has maximum students from ArrayList given above.
Map<Country, Long> numberOfStudentsByCountry =
students.stream()
.collect(groupingBy(Student::getCountry, counting()));
System.out.println(numberOfStudentsByCountry);
}
结果如下
{GERMANY=3, POLAND=2, UK=3}
我要像下面这样。
{GERMANY=3}
您可以使用 Stream.max
比较以下值进一步获得地图中出现频率最高的国家/地区:
Country mostFrequent = numberOfStudentsByCountry.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(Country.POLAND) // some default country
如果您只对单个 Map.Entry
感兴趣,可以使用
Map.Entry<Country,Long> mostFrequentEntry = numberOfStudentsByCountry.entrySet()
.stream()
.max(Map.Entry.comparingByValue()) // extensible here
.orElse(null); // you can default according to service
注意:这两个都应该具有足够的可扩展性,以便在您想要中断时向 Comparator
添加自定义逻辑两国的频率相等等联系。举例来说,这可能发生在示例数据中的 GERMANY 和 UK 之间。
Map.Entry<Country, Long> maxEntry = students.stream()
.collect(groupingBy(Student::getCountry, counting()))
.entrySet().stream().max(Map.Entry.comparingByValue()).get();