【问题标题】:Cannot understand how to implement Memoization of a function with Guava无法理解如何用 Guava 实现函数的记忆化
【发布时间】:2020-07-18 17:01:51
【问题描述】:

我有一个 Java 类,其中包含我想记住的以下函数以提高性能:

 private Boolean processFilterByPackage(JetbrainsSnippet item, PsiFile file) {
        PackageProviderProcessor processor = packageProviderProcessorFactory
                .createFromProvider(item.getContext()
                        .getPackageProvider()
                        .getProvider()
                );

        return processor.process(item, file);
    }

我正在尝试使用 Guava,遵循 this 教程,但我无法理解它是如何工作的。

我现在有这个。

LoadingCache<Boolean, ??> memo = CacheBuilder.newBuilder()
            .expireAfterAccess(20, TimeUnit.SECONDS)
            .build(CacheLoader.from(this::processFilterByPackage));

如何指定函数的参数以及如何在“CacheLoader.from”方法中正确定义“回调”函数,因为它抱怨无法解析该方法。 我猜该方法必须返回一个函数,但不确定如何。

感谢您的帮助。

【问题讨论】:

    标签: java guava memoization


    【解决方案1】:

    好像LoadingCache只支持单参数的方法。

    我通过将我需要的两个参数包装在一个 Pair 中来解决这个问题:

    private final LoadingCache<Pair<PackageContext, PsiFile>, Boolean> memoizedFilterByPackageFn =
        CacheBuilder.newBuilder()
          .expireAfterAccess(30, TimeUnit.SECONDS)
          .build(CacheLoader.from(this::processFilterByPackage));
      
    

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 2021-03-30
      • 2020-02-04
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2018-09-18
      • 2017-08-18
      相关资源
      最近更新 更多