You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除ContentInfoCompat onReceiveContent()中的Lambda表达式

替换Lambda表达式为非Lambda形式的实现方案

当然可以实现,Lambda本质是Java函数式接口的语法糖,你只需要用匿名内部类实现对应的函数式接口即可。

这里contentInfo.partition()方法接收的是Predicate<ContentInfoCompat.Item>类型的参数,我们可以直接创建这个接口的匿名实现类,替代原来的Lambda表达式:

修改后的完整代码如下:

public class MyReceiver implements OnReceiveContentListener {
     public static final String[] MIME_TYPES = new String[] {"image/*", "video/*"};

     @Override
     public ContentInfoCompat onReceiveContent(View view, ContentInfoCompat contentInfo) {
         Pair<ContentInfoCompat, ContentInfoCompat> split = contentInfo.partition(
                 new Predicate<ContentInfoCompat.Item>() {
                     @Override
                     public boolean test(ContentInfoCompat.Item item) {
                         return item.getUri() != null;
                     }
                 });
         ContentInfoCompat uriContent = split.first;
         ContentInfoCompat remaining = split.second;
         if (uriContent != null) {
             // 应用特定逻辑,处理uriContent中的URI...
         }
         // 返回应用未处理的内容,保留平台默认行为
         return remaining;
     }
 }

补充说明

  • 原来的Lambda表达式item -> item.getUri() != null,和匿名内部类中test方法的逻辑完全等价,都是判断每个ContentInfoCompat.Item的Uri是否不为空
  • 底层逻辑确实是循环处理contentInfo中的所有Item,和你对这部分逻辑的判断一致

内容的提问来源于stack exchange,提问作者Patryk F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:44:56