当前位置: 首页 > 知识库问答 >
问题:

“错误:不兼容的类型:推理变量R有不兼容的边界”,当flatMap在单行中映射流时

屠建本
2023-03-14

我有一个自定义类custom

public class Custom {

  private Long id;

  List<Long> ids;

  // getters and setters
}

现在我有了列表

    List<Custom> customs = Collections.emptyList();
    Stream<Long> streamL = customs.stream().flatMap(x -> x.getIds().stream());
    List<Long> customIds2 = streamL.collect(Collectors.toList());
    Set<Long> customIds3 = streamL.collect(Collectors.toSet());

现在我将第2行和第3行合并为一行,如下所示。

    List<Long> customIds = customs.stream().flatMap(x -> x.getIds().stream()).collect(Collectors.toSet());

现在,这段代码没有编译,我得到了下面的错误-

    error: incompatible types: inference variable R has incompatible bounds
            List<Long> customIds = customs.stream().flatMap(x -> x.getIds().stream()).collect(Collectors.toSet());
                                                                                            ^
        equality constraints: Set<Long>
        upper bounds: List<Long>,Object
    where R,A,T are type-variables:
        R extends Object declared in method <R,A>collect(Collector<? super T,A,R>)
        A extends Object declared in method <R,A>collect(Collector<? super T,A,R>)
        T extends Object declared in interface Stream

如何转换列表


共有2个答案

葛永丰
2023-03-14

这应该可以做到:

Set<Long> collectSet = customs.stream()
                           .flatMap(x -> x.getIds().stream())
                           .collect(Collectors.toSet());

您试图将集合转换为列表,这是不可能的。

阳兴朝
2023-03-14

你可以这样做:

List<Custom> customs = Collections.emptyList();
Set<Long> customIdSet = customs.stream()
                               .flatMap(x -> x.getIds().stream())
                               .collect(Collectors.toSet()); // toSet and not toList

你得到一个编译器错误的原因是,你使用了一个不正确的收集器返回一个列表,而不是一个Set,这是你的理论收益类型,因为你把它分配给一个变量的Set

 类似资料:
  • 我有一个树对象,它包含树对象的子对象(HashMap),等等 我需要按numericPosition变量筛选对象 例如: 在这种情况下,我应该得到一个树对象过滤的数字位置 树类 以防 我得到这个错误:错误:不兼容类型:推断变量R具有不兼容的边界 我一直在遵循这个例子,但它对我不起作用。https://www.mkyong.com/java8/java-8-filter-a-map-examples

  • 错误:(65,52)java:不兼容类型:推理变量U的边界不兼容等式约束:akka。http。javadsl。模型HttpResponse下限:com。我的演员。聊天演员。聊天信息 下面这行代码显示了错误: 这里是HttpResponse是Akka Http的。 我不知道它在说什么。解决它的方法应该是什么?

  • JDK 1.8 设置和收集。 我想数一数那个十字路口 我试试这个: 但我有一个错误:

  • 我有以下代码 出于某种原因,它抛出了以下编译错误 Solution.java:11:错误:不兼容类型:推断变量T具有不兼容的边界List=Arrays.asList(A);^相等约束:整数下界:int[]其中T是类型变量:T扩展方法中声明的Object asList(T...) 我假设这是一个Java8功能但我不知道如何解决这个错误

  • 这是我的分类程序类,我试图在其中实现一些算法。 但是,在编译时,我得到了以下错误: 必需:AbstractList found:ArrayList原因:推理变量T具有不兼容的边界等式约束:ShipDetail上限:Comparable,其中T是类型变量:T扩展了方法QuickSort(AbstractList)中声明的Comparable

  • 问题内容: 我有以下代码 由于某种原因,它会引发以下编译错误 Solution.java:11:错误:不兼容的类型:推断变量T具有不兼容的边界List list = Arrays.asList(A); ^等式约束:整数下限:int []其中T是类型变量:T扩展了在方法asList(T …)中声明的对象 我假设这是Java 8功能,但是我不确定如何解决该错误 问题答案: 期望可变数量的。不是,而是,