簡介
今天在開發中遇到一個分組的問題,因為當時資料庫的用的JPA開發的,當時我不想去寫原生的SQL來進行分組處理。是以就查詢了jdk8中的分組。先看一個分組的例子:
@Data
public class Student {
private String name;
private int age;
private int code;
public Student(String name, int age, int code) {
this.name = name;
this.age = age;
this.code = code;
}
public static void main(String[] args) {
Student student = new Student("小名",20,115);
Student student1 = new Student("小名",24,115);
Student student2 = new Student("小名",20,115);
List studentList = Arrays.asList(student, student1, student2);
//按照年齡分組
Map> ageMap = studentList.stream().collect(Collectors.groupingBy(Student::getAge));
System.out.println("ageMap = " + ageMap);
//按照年齡分組,并求出個數
Map ageMap2 = studentList.stream().collect(Collectors.groupingBy(Student::getAge, Collectors.counting()));
System.out.println("ageMap2 = " + ageMap2);
}
}
開發中的代碼:
public List areaList() {
List deviceConfigs = deviceConfigRepository.findAll();
Map> listMap = deviceConfigs.stream().collect(Collectors.groupingBy(DeviceConfig::getParkingLot));
List deviceConfigDTOS = Lists.newArrayList();
for (Map.Entry> entry : listMap.entrySet()) {
AreaDeviceConfigDTO areaDeviceConfigDTO = new AreaDeviceConfigDTO();
ParkingLot parkingLot = entry.getKey();
areaDeviceConfigDTO.setId(parkingLot.getId());
areaDeviceConfigDTO.setParkingLotName(parkingLot.getParkingLotName());
areaDeviceConfigDTO.setMain(parkingLot.isMain());
areaDeviceConfigDTO.setDeviceConfigs(entry.getValue());
deviceConfigDTOS.add(areaDeviceConfigDTO);
}
return deviceConfigDTOS;
}
ps:更多的資訊請參考JDK8中的stream的用法