0
フィルタメソッドを使用するとエラーが発生します。エラーは、フィルタがタイプListに対して未定義であることを示します。 IDEがフィルタメソッドを認識していないか、コードに問題があるかどうかはわかりません。どんな助けでも大歓迎です。私はコンプライアンスレベルを1.8で確認しています。何が問題なのか理解してください。Java 8のストリームからフィルタメソッドを使用中にエラーが発生しました
public class TestJava8 {
public static void main(String[] args) {
Track track1 = new Track("master1", 7);
Track track2 = new Track("master2", 8);
Track track3 = new Track("master3", 9);
Track track4 = new Track("master4", 10);
Track track5 = new Track("master5", 11);
Track track6 = new Track("master6", 7);
Track track7 = new Track("master7", 8);
Track track8 = new Track("master8", 9);
Track track9 = new Track("master9", 10);
Track track10 = new Track("master10", 11);
Track track11 = new Track("master11", 12);
List<Track> tracks1 = new ArrayList<>();
List<Track> tracks2 = new ArrayList<>();
tracks1.add(track1);
tracks1.add(track2);
tracks1.add(track3);
tracks1.add(track4);
tracks1.add(track5);
tracks2.add(track6);
tracks2.add(track7);
tracks2.add(track8);
tracks2.add(track9);
tracks2.add(track10);
tracks2.add(track11);
Album album1 = new Album(tracks1);
Album album2 = new Album(tracks2);
List<Album> albums = new ArrayList<>();
albums.add(album1);
albums.add(album2);
Set<String> tracksFound = findLongTrackss(albums);
tracksFound.forEach(track -> System.out.println(track));
}
public static Set<String> findLongTracks(List<Album> albums) {
Set<String> trackNames = new HashSet<>();
for (Album album : albums) {
for (Track track : album.getTracks()) {
if (track.getLength() > 6) {
String name = track.getName();
trackNames.add(name);
}
}
}
return trackNames;
}
public static Set<String> findLongTrackss(List<Album> albums) {
Set<String> trackNames = new HashSet<>();
albums.stream()
.forEach(album -> {
album.getTracks()
.filter(track -> track.getLength() > 8)// I am getting an error here
.map(track -> track.getName())
.forEach(name -> trackNames.add(name));
});
return trackNames;
}
}
質問に[mcve]が含まれていることを確認して、残りのコードがどのように見えるかを推測する必要はありません。 'album.getTracks()'は 'List
を返すように' getTracks() 'を変更してください。それはうまくいった。 –