java: types incompatibles: la variable d'inférence T a des limites incompatibles contraintes d'égalité: limites inférieures: java.util.Liste<>


J'essaie d'obtenir une liste à partir d'un flux, mais j'ai une exception.

Voici l'objet Movie avec une liste d'un objet.

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

Voici le MovieTrans:

public class MovieTrans {

    public String text;

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

J'ajoute l'élément dans les listes:

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());

J'ai cette erreur de compilateur:

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

2 answers

L'appel map dans

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

Convertit un Stream<Movie> pour un Stream<List<MovieTrans>>, que vous pouvez recueillir dans un List<List<MovieTrans>>, pas List<MovieTrans>.

Pour obtenir un seul List<MovieTrans>, utiliser flatMap :

List<MovieTrans> movieTransList1 = 
    movies.stream()
          .flatMap(m -> m.getMovieTranses().stream())
          .collect(Collectors.toList());
 12
Author: Eran, 2017-01-18 12:14:30

Le type de votre expression est List<List<MovieTrans>>: c'est la concaténation des résultats de la getMovieTranses méthode.

Utilisez flatMap à la place:

List<MovieTrans> movieTransList1 = movies.stream()
    .flatMap(m -> m.getMovieTranses().stream())
    .collect(Collectors.toList());
 8
Author: Andy Turner, 2017-01-18 12:35:21