【发布时间】:2016-07-22 20:58:55
【问题描述】:
我有一个 Person 类,它有一个名字、年龄和最喜欢的运动列表(游泳、跑步、骑自行车、拳击、摔跤)
public class Person {
private String name;
private int age;
private List<String> favouriteSports;
public Person(String name, int age, List<String> favourites) {
this.name = name;
this.age = age;
this.favouriteSports= favourites;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getFavourites() {
return favouriteSports;
}
}
public class PersonManager {
private Map<String, Person> persons = new HashMap<>();
public void calculateMostFavouriteForAge(){
//1. Group all persons according to age
//2. Get count of favourite sports for every sport in that age group
//3. Store the age and the favourite sport in the age group in a Map.
}
}
PersonManager 有一个 Person 名称和对应的 Person 对象的内部映射。 我想获得特定年龄段所有人最喜欢的商品。
假设我有 100 个人(随机数),假设我有 25 个人在 20 岁年龄段,在 20 岁年龄段的 25 个人中,我想找到选择最多的运动。
我如何根据地图值对所有人的年龄进行分组,并存储该年龄组最喜欢的运动。
【问题讨论】:
-
从地图值中获取每个人,将他们除以您的年龄范围,然后从该年龄范围内的人中找出最流行的运动。繁荣,你有你最喜欢的运动。
-
persons.entrySet().stream().collect(Collectors.groupingBy(Person::getAge)); - 尝试分组时出现错误。不知道如何根据年龄从地图中获取值对象。
-
这可能有帮助 docs.oracle.com/javase/8/docs/api/java/util/stream/… 或者你可以用老式的方式在 keySets 上使用 for-each 循环
-
我实际上是在尝试学习和试验 lambda 和流。所以我不想用老式的方式来做。我已阅读文档,示例仅使用列表作为输入。所以没有多大帮助!
标签: java collections lambda java-stream