2017-09-09 15 views
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; 

} 

} 
+5

質問に[mcve]が含まれていることを確認して、残りのコードがどのように見えるかを推測する必要はありません。 'album.getTracks()'は 'List 'を返します。その場合、 '.filter(...)'の前に '.stream()'を置いてください。そうでなければ '' ' – Misha

+0

を返すように' getTracks() 'を変更してください。それはうまくいった。 –

答えて

0

あなたはthe documentationを読み、スクロールダウンSide-Effectsにする必要があり、あなたに本当に近い例があります。

Set<String> trackNames = albums.stream() 
      .flatMap(a -> a.getTracks().stream() 
        .filter(track -> track.getLength() > 8) 
        .map(Track::getName)) 
      .collect(Collectors.toSet()); 
関連する問題