最近遇到一个这样的需求:一个List集合中的对象,要按元素的部分属性进行分组;
举个例子就是:一个Book对象,有author,name,price三个属性,现在要将一个list集合中的book对象中的作者和书名一样的对象放到一起,进行分组。
上述就是需求,搜罗一阵后找到解决方法,大致思路就是:
首先确定比较对象与比较方式,这里依然拿Book举例,比较对象就是List[Book],比较方法就是author+name值相同的两个Book对象为同组;
创建一个Map
//Book对象
Book.java
public class Book{
private String author;
private String name;
private String price;
public void setAuthor(String author){
this.author = author;
}
public String getAuthor(){
return this.author;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setPrice(String price){
this.price= price;
}
public String getPrice(){
return this.price;
}
}
//分组类
GroupList.java
public class GroupList {
public static Map<String,List<Book>> group(List<Book> books){
Map<String,List<Book>> maps = new HashMap<String, List<Book>>();
if(books.size>0){
for(Book book : books){
//定义key值
String key = book.getAuthor()+book.getName();
//map集合中有这个key说明与其他对象的author和name相同,将该对象添加至key值对应的list集合中
if(maps.containsKey(key)){
maps.get(key).add(book);
}else{
//map集合中尚未有次key,将key值与该对象一并存入map集合,自成一组
List<Book> books1 = new ArrayList<Book>();
books1.add(book);
maps.put(key, books1);
}
}
}
return maps;
}
}
学无止境