List集合根据对象中某个属性进行分组
1.创建一个Person实体类
package com. sm. text;
public class Person {
private String name;
private Integer age;
public Person ( ) {
super ( ) ;
}
public Person ( String name, Integer age) {
super ( ) ;
this . name = name;
this . age = age;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public Integer getAge ( ) {
return age;
}
public void setAge ( Integer age) {
this . age = age;
}
@Override
public String toString ( ) {
return "person [name=" + name + ", age=" + age + "]" ;
}
@Override
public boolean equals ( Object obj) {
if ( this == obj)
return true ;
if ( obj == null)
return false ;
if ( getClass ( ) != obj. getClass ( ) )
return false ;
Person other = ( Person) obj;
if ( age != other. age)
return false ;
if ( name == null) {
if ( other. name != null)
return false ;
} else if ( ! name. equals ( other. name) )
return false ;
return true ;
}
}
2.创建集合存入对象,进行分组
public static void main ( String[ ] args) throws ParseException {
List< Person> pList = new ArrayList < Person> ( ) ;
pList. add ( new Person ( "zhangsan" , 12 ) ) ;
pList. add ( new Person ( "zhangsan" , 13 ) ) ;
pList. add ( new Person ( "zhangsan" , 14 ) ) ;
pList. add ( new Person ( "sdf" , 12 ) ) ;
pList. add ( new Person ( "zhangsan" , 13 ) ) ;
pList. add ( new Person ( "zhangsan" , 12 ) ) ;
Map< Integer, List< Person> > collect = pList. stream ( ) . collect ( Collectors. groupingBy ( Person: : getAge) ) ;
for ( Integer key: collect. keySet ( ) ) {
Person p1 = collect. get ( key) . get ( 0 ) ;
System. out. println ( key) ;
System. out. println ( collect. get ( key) ) ;
System. out. println ( collect. get ( key) . size ( ) ) ;
}
}