java 8 Streamグループ分けの使い方

2200 ワード

概要
今日は開発中に一つのグループの問題に遭遇しました。当時のデータベース用のJPAが開発したので、元のSQLを書いてグループ化処理をしたくなかったです。そこで、jdk 8のグループを調べました。まずグループの例を見ます。
@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:もっと多い情報はJDK 8の中のstreamの使い方を参考にしてください。