当前位置: 首页 > 面试题库 >

Java lang IllegalAccess通过HashBasedTable累加器收集Guava不可变表

荆运诚
2023-03-14
问题内容

执行以下代码时出错,

原因:java.lang.IllegalAccessError:尝试从类访问com.google.common.collect.AbstractTable类

 ImmutableTable.copyOf(listItemsToProcess.parallelStream()
                    .map(item ->
                            ProcessorInstanceProvider.getInstance()
                            .buildImmutableTable(item))
                    .collect(() -> HashBasedTable.create(),
                            HashBasedTable::putAll,

                            HashBasedTable<Integer, String,    
                            Boolean>::putAll)
                    );

出现错误-使用Oracle 1.8 jre的HashBasedTable :: putAll


问题答案:

有趣的是,我用Lambda表达式替换了方法引用,并且它起作用了。

    ImmutableTable.copyOf(itemList.parallelStream()
                    .map(item ->
                            ProcessorInstanceProvider.get()
                            .buildImmutableTable(item))
                    .collect(() -> HashBasedTable.create(),
                            (a, b) -> a.putAll(b),
                            (a, b) -> a.putAll(b))
                    );


 类似资料:
  • 问题内容: 我真的很喜欢Java 8流和Guava的不可变集合,但是我不知道如何将两者一起使用。 例如,如何实现将流结果收集到ImmutableMultimap中的Java 8 Collector? 优点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式。 问题答案: 从21版开始,您可以

  • 我想做以下事情: 但在某种程度上,结果列表是Guava的<code>ImmutableList<code>的实现。 我知道我可以做到 但我想直接收集它。我试过了 但它抛出了一个异常: java.lang.UnsupportedOperationException at com.google.common.collect.ImmutableCollection.add(ImmutableCollec

  • 假设我试图创建一个收集器,将数据聚合到一个资源中,该资源在使用后必须关闭。有没有办法实现类似于

  • 问题内容: 我不了解以下方法的第三个参数的实用程序: 从javaDoc: 产生的结果等于: 如您所见,该参数未使用。例如,以下代码将字符串累积到ArrayList中: 但我期望这样: 问题答案: 在使用时,你的是平行的,因为在这种情况下,多个线程收集的元素到最终输出的子列表,并且这些子列表必须被组合以产生最终的。

  • 我不明白以下方法的第三个参数的效用: 来自Javadoc: 如您所见,没有使用参数。例如,以下内容将把字符串累加到ArrayList中: 但我预料到了这一点:

  • 我非常喜欢Java8流和Guava的不可变集合,但我不知道如何将两者结合使用。 例如,如何实现将流结果收集到不可变多映射中的Java 8收集器? 奖励点:我希望能够提供键/值映射器,类似于Collectors.toMap()的工作方式。