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>
5
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