java – 按多个字段对列表中的对象进行分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 按多个字段对列表中的对象进行分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1661字,纯文字阅读大概需要3分钟。
内容图文
![java – 按多个字段对列表中的对象进行分组](/upload/InfoBanner/zyjiaocheng/819/ffd1426c2cfd434da24dcfcbeb156118.jpg)
我有一个像这样的简单对象
public class Person{
private int id;
private int age;
private String hobby;
//getters, setters
}
我想按属性分组Person列表
输出应该是这样的
Person count/Age/Hobby
2/18/Basket
5/20/football
用图表来了解更多
X轴:爱好重新分配
Y轴:人员分布的数量
颜色代表年龄
我设法使用map对一个属性进行分组,但我无法计算如何按多个属性进行分组
//group only by age . I want to group by hobby too
personMapGroupped = new LinkedHashMap<String, List<Person>>();
for (Person person : listPerson) {
String key = person.getAge();
if (personMapGroupped.get(key) == null) {
personMapGroupped.put(key, new ArrayList<Person>());
}
personMapGroupped.get(key).add(person);
}
然后我像这样检索可分组对象
for (Map.Entry<String, List<Person>> entry : personMapGroupped .entrySet()) {
String key = entry.getKey();// group by age
String value = entry.getValue(); // person count
// i want to retieve the group by hobby here too...
}
任何意见,将不胜感激.
非常感谢你
解决方法:
实现根据不同领域比较人的方法.例如,如果要按年龄分组,请将此方法添加到Person:
public static Comparator<Person> getAgeComparator(){
return new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.age-o2.age;
}
};
}
然后你可以简单地调用:Arrays.sort(people,Person.getAgeComparator())或使用以下代码对Collection进行排序:
List<Person> people = new ArrayList<>();
people.sort(Person.getAgeComparator());
要同时使用多个比较器进行排序,首先要为每个字段定义一个比较器(例如,一个用于年龄,一个用于名称).然后你可以使用ComparatorChain组合它们.你可以使用ComparatorChain,如下所示:
ComparatorChain chain = new ComparatorChain();
chain.addComparator(Person.getNameComparator());
chain.addComparator(Person.getAgeComparator());
内容总结
以上是互联网集市为您收集整理的java – 按多个字段对列表中的对象进行分组全部内容,希望文章能够帮你解决java – 按多个字段对列表中的对象进行分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。