假设我们要实现这些类:
public static class Song
{
String title;
Artist artist;
Album album;
Song(String title, Artist artist, Album album)
{ this.title = title; this.artist = artist; this.album = album; }
@Override public String toString() { return "Song: " + title; }
}
public static class Artist
{
String name;
Artist(String name) { this.name = name; }
@Override public String toString() { return "Artist: " + name; }
}
public static class Album
{
String name;
Album(String name) { this.name = name; }
@Override public String toString() { return "Album: " + name; }
}
其中:
Song
就是你现在用相当不幸的名称SongInfo
Artist
调用是一个类,你还没有,但你应该。如果你不能处理这个问题,那么只要你看到Artist
就想到一个String
,里面有一个艺术家的名字。
Album
是另一类,你还没有,但你应该。如果您无法处理该问题,那么无论何时您看到Album
只需考虑一个String
并附上相册的标题即可。
并假设我们开始与这个数据集:
Artist artist1 = new Artist("Artist1");
Artist artist2 = new Artist("Artist2");
Set<Artist> artists = new HashSet<>(Arrays.asList(artist1, artist2));
Album album1 = new Album("Album1");
Album album2 = new Album("Album2");
Set<Album> albums = new HashSet<>(Arrays.asList(album1, album2));
Song song11a = new Song("Song11a", artist1, album1);
Song song11b = new Song("Song11b", artist1, album1);
Song song22a = new Song("Song22a", artist2, album2);
Song song22b = new Song("Song22b", artist2, album2);
List<Song> songs = Arrays.asList(song11a, song11b, song22a, song22b);
那么下面会给你想要的东西:
Collection<Song> getSongsByArtist(Collection<Song> songs, Artist artist)
{
return songs.stream().filter(song -> song.artist == artist)
.collect(Collectors.toList());
}
Collection<Album> getAlbumsByArtist(Collection<Song> songs, Artist artist)
{
return songs.stream().filter(song -> song.artist == artist)
.map(song -> song.album).collect(Collectors.toSet());
}
和下面会给你你一直想知道的一切关于您的数据集,但不敢问:
Map<Song,Artist> artistsBySong = songs.stream()
.collect(Collectors.toMap(Function.identity(), song -> song.artist));
Map<Song,Album> albumsBySong = songs.stream()
.collect(Collectors.toMap(Function.identity(), song -> song.album));
Map<Artist,List<Song>> songsByArtist = songs.stream()
.collect(Collectors.groupingBy(song -> song.artist));
Map<Album,List<Song>> songsByAlbum = songs.stream()
.collect(Collectors.groupingBy(song -> song.album));
assert songs.stream().map(song -> song.album)
.collect(Collectors.toSet()).equals(albums);
assert songsByAlbum.keySet().equals(albums);
“器官将这些数据分成3个不同的片段,例如:艺术家列表 - >所选艺术家的专辑 - >所选专辑的歌曲。“如果你能够在一个句子的片段中解释你在想什么奇怪的想法给许多不知名的人,这不是很好吗?但我恐怕这只对你有意义。 –
@MikeNakis我添加了更多信息,希望它有道理。请让我知道你是否有任何其他怀疑理解这个问题。 – Shubham
创建一个'歌曲'类,它有一个'List'(名为'infos'?)和一个'List'类,它有一个'List '(名为'songs'?)。 –
2017-02-26 19:46:15