天天看點

java8 stream 分組_java8 Stream分組用法

簡介

今天在開發中遇到一個分組的問題,因為當時資料庫的用的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的用法