Tôi đang bắt đầu sử dụng API 8 luồng java. Tôi muốn chuyển đổi danh sách "tập hợp kết quả sql" thành các đối tượng miền, tức là cấu trúc tổng hợp.Java 8 Streams: xây dựng các đối tượng đa cấp/tổng hợp
Đối tượng miền: người dùng có bộ sưu tập quyền, mỗi quyền có một bộ sưu tập gồm năm ứng dụng. Ví dụ: John có 2 quyền (MODERATOR và DEV). phép người điều hành của nó là chỉ áp dụng cho năm 2014 và 2015 phép dev của nó chỉ có thể áp dụng cho 2014.
class User {
// some primitives attributes
List<Permission> permission;
}
class Permission {
// some primitives attributes
List<Integer> years;
}
Bây giờ tôi thực hiện một truy vấn và nhận được một danh sách các kết quả bằng phẳng, một cái gì đó như:
[1, "moderator", 2014]
[1, "moderator", 2015]
[1, "dev", 2014]
[2, "dev", 2010]
[2, "dev", 2011]
[2, "dev", 2012]
1 và 2 là userId.
Tôi đã thử xây dựng khác nhau nhưng cuối cùng nó phức tạp hơn nhiều so với thông thạo. Và đã không làm việc :)
Tôi đọc trong một cuốn sách Java 8 rằng nó "đơn giản" để xây dựng các đối tượng dompain với người thu gom.
tôi đã khóc một chút khi tôi đọc rằng: '(
tôi đã cố gắng
sb.collect(
collectingAndThen(
groupingBy(
Mybean::getUserId,
collectingAndThen(
groupingBy(Monbean::getPermissionId, mapping(convertPermission, toList())),
finisherFonction)
),
convertUser)
);
và có một địa ngục của thất bại Generics biên soạn
- cách tốt nhất để xây dựng đa mức hợp là những gì. đối tượng miền bằng cách sử dụng java 8 luồng?
- là bộ sưu tậpVà/sau đó hoàn thành một ý tưởng hay?
- hoặc bạn chỉ sử dụng groupingBy theo sau là một hàm ánh xạ?
- bạn chuyển đổi các phân loại cho một đối tượng (loại chức năng lập bản đồ mức độ đầu tiên?)
Bởi vì vào cuối Tôi muốn thoát khỏi bản đồ và nhận một kết quả List<User>
(Tôi nghĩ rằng tôi có thể thêm một bản đồ gọi trên mục nhậpSet để hoàn thành việc chuyển đổi).
"Kết quả căn hộ" của bạn là gì? Mảng của các đối tượng? – mkobit