实现对List里面的对象元素,以某个属性来分组。
代码实现:
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListGroupTest {
static List<User> userList = new ArrayList<>();
public static void main(String[] args) {
/* 方式一:构建list,map,来实现对List,按某个元素分组 (当分组的元素存在为null时,可使用) */
Map<Integer, List<User>> groupBy2 = new HashMap<>();
List<User> tempList = null;
for(User user : userList) {
if(groupBy2.containsKey(user.getSex())) {
tempList = groupBy2.get(user.getSex());
tempList.add(user);
} else {
// 否则,第一次先构造一个list,在存入map
tempList = new ArrayList<>();
tempList.add(user);
groupBy2.put(user.getSex(), tempList);
}
}
System.out.println("groupBy2: " + JSON.toJSONString(groupBy2));
/* 方式二:使用java8 来实现对List,按某个元素分组 (当分组的元素都不为null时,可使用,否则,会报空指针) */
Map<Integer, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getSex));
System.out.println("groupBy: " + JSON.toJSONString(groupBy));
}
static {
User user = new User();
user.setId(1L);
user.setName("张三");
user.setSex(1);
userList.add(user);
user = new User();
user.setId(2L);
user.setName("李四");
user.setSex(0);
userList.add(user);
user = new User();
user.setId(3L);
user.setName("王五");
user.setSex(1);
userList.add(user);
user = new User();
user.setId(4L);
user.setName("赵六");
user.setSex(0);
userList.add(user);
user = new User();
user.setId(5L);
user.setName("小七");
user.setSex(0);
userList.add(user);
/* 将分组的字段 设置为null */
user = new User();
user.setId(6L);
user.setName("大巴");
user.setSex(null);
userList.add(user);
}
static class User {
private Long id;
private String name;
private Integer sex;
private String remark;
/* 省略 get set */
}
}