【问题标题】:java: incompatible types: inference variable T has incompatible bounds equality constraints: lower bounds: java.util.List<>java:不兼容的类型:推理变量 T 具有不兼容的边界等式约束:下限:java.util.List<>
【发布时间】:2017-01-18 12:11:29
【问题描述】:

我尝试从流中获取列表,但我有一个例外。

这是带有对象列表的 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>

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

    map 来电

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

    Stream&lt;Movie&gt; 转换为Stream&lt;List&lt;MovieTrans&gt;&gt;,您可以将其收集到List&lt;List&lt;MovieTrans&gt;&gt;,而不是List&lt;MovieTrans&gt;

    要获得单个List&lt;MovieTrans&gt;,请使用flatMap

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

    【讨论】:

      【解决方案2】:

      您的表达式的类型是List&lt;List&lt;MovieTrans&gt;&gt;:它是getMovieTranses 方法的结果的串联。

      改用flatMap

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

      【讨论】:

      • 在 flatMap 中不能将方法引用作为参数调用。我用 m -> m.getMovieTranses().stream() 来做
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多