Tôi muốn tìm hiểu cách sử dụng cú pháp Java 8 với các luồng và bị kẹt một chút.Nhóm Java 8 theo từ một đến nhiều
Thật dễ dàng để nhóm lại khi bạn có một khóa cho mọi giá trị. Nhưng nếu tôi có Danh sách khóa cho mọi giá trị và vẫn muốn phân loại chúng với groupingBy thì sao? Tôi có phải chia nó thành nhiều câu hay có thể là một phép thuật nhỏ có thể được thực hiện để làm cho nó đơn giản hơn.
Đây là mã cơ bản:
List<Album> albums = new ArrayList<>();
Map<Artist, List<Album>> map = albums.stream().collect(Collectors.groupingBy(this::getArtist));
Nó hoạt động tuyệt vời nếu chỉ có một nghệ sĩ cho mỗi album. Nhưng tôi phải trả lại một Danh sách vì một Album có thể có nhiều Nghệ sĩ. Album và nghệ sĩ được sử dụng để minh hoạ tất nhiên, tôi có các loại thực thế giới ..
Có lẽ là một giải pháp đơn giản nhưng tôi đã không tìm thấy nó trong một thời gian vì vậy tôi kêu gọi các bộ não tập thể trang web này đại diện cho giải quyết nó. :) Một giải pháp phức tạp cũng được chào đón trong trường hợp một giải pháp đơn giản không tồn tại.
Trong lớp Album hoặc như là một phương pháp hữu ích chụp một album như là đối số:
Artist getArtist(); // ok
List<Artist> getArtist(); // Not ok, since we now have many "keys" for every Album
Chúc mừng, Mikael Grev
... Có lẽ là một giải pháp đơn giản: 'Various Artists' ;-) – mcalex