は、我々はこれらのクラスを開始したとします
Song
は、あなたが今SongInfo
Artist
、むしろ不幸な名前で呼んでいるものですが、クラスである: 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; }
}
あなたはまだ持っていませんが、あなたはすべきです。あなたがそれを処理できない場合は、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 '(' songs'という名前の?)というクラスを持つ 'Album'クラスを作成します。 –