2017-01-18 13 views
5

ストリームからリストを取得しようとしていますが、例外があります。java:互換性のない型:推論変数Tに互換性のない境界があります。等しい制約:下限:java.util.List <>

ここには、オブジェクトのリストを持つMovieオブジェクトがあります。ここで

public class Movie { 

    private String example; 
    private List<MovieTrans> movieTranses; 

    public Movie(String example, List<MovieTrans> movieTranses){ 
     this.example = example; 
     this.movieTranses = movieTranses; 
    } 
    getter and setter 

がMovieTransです:

public class MovieTrans { 

    public String text; 

    public MovieTrans(String text){ 
     this.text = text; 
    } 
    getter and setter 

私はリストに要素を追加します。

List<MovieTrans> movieTransList = Arrays.asList(new MovieTrans("Appel me"), new MovieTrans("je t'appel")); 
List<Movie> movies = Arrays.asList(new Movie("movie played", movieTransList)); 
//return a list of MovieTrans 
List<MovieTrans> movieTransList1 = movies.stream().map(Movie::getMovieTranses).collect(Collectors.toList()); 

私はこのコンパイラエラーがあります。

Error:(44, 95) java: incompatible types: inference variable T has incompatible bounds 
    equality constraints: MovieTrans 
    lower bounds: java.util.List<MovieTrans> 

答えて

10

mapコールを

movies.stream().map(Movie::getMovieTranses) 

あなたがList<List<MovieTrans>>、ないList<MovieTrans>に収集することができStream<List<MovieTrans>>Stream<Movie>を変換します。

、単一List<MovieTrans>を得るflatMapを使用するには:

List<MovieTrans> movieTransList1 = 
    movies.stream() 
      .flatMap(m -> m.getMovieTranses().stream()) 
      .collect(Collectors.toList()); 
8

あなたの式の型はList<List<MovieTrans>>です:それはgetMovieTranses方法の結果の連結です。代わりに

使用flatMap

List<MovieTrans> movieTransList1 = movies.stream() 
    .flatMap(m -> m.getMovieTranses().stream()) 
    .collect(Collectors.toList()); 
+0

flatMapにおけるパラメータとしてメソッド参照を呼び出すことはできません。私はm - > m.getMovieTranses()でそれを行います。ストリーム() – emoleumassi

+2

@emoleumassiが編集しました。 –

関連する問題