實現對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 */
}
}