java list 多个字段_java – 按多个字段对列表中的对象进行分组

我有一个像这样的简单对象

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

用图表来了解更多

EP70R.png

X轴:爱好重新分配

Y轴:人员分布的数量

颜色代表年龄

我设法使用map对一个属性进行分组,但我无法计算如何按多个属性进行分组

//group only by age . I want to group by hobby too

personMapGroupped = new LinkedHashMap>();

for (Person person : listPerson) {

String key = person.getAge();

if (personMapGroupped.get(key) == null) {

personMapGroupped.put(key, new ArrayList());

}

personMapGroupped.get(key).add(person);

}

然后我像这样检索可分组对象

for (Map.Entry> 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 getAgeComparator(){

return new Comparator() {

@Override

public int compare(Person o1, Person o2) {

return o1.age-o2.age;

}

};

}

然后你可以简单地调用:Arrays.sort(people,Person.getAgeComparator())或使用以下代码对Collection进行排序:

List people = new ArrayList<>();

people.sort(Person.getAgeComparator());

要同时使用多个比较器进行排序,首先要为每个字段定义一个比较器(例如,一个用于年龄,一个用于名称).然后你可以使用ComparatorChain组合它们.你可以使用ComparatorChain,如下所示:

ComparatorChain chain = new ComparatorChain();

chain.addComparator(Person.getNameComparator());

chain.addComparator(Person.getAgeComparator());

标签:java,dictionary,grouping

来源: https://codeday.me/bug/20190528/1167741.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值