首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LambdaJ索引()和键类型转换

LambdaJ索引()和键类型转换
EN

Stack Overflow用户
提问于 2013-04-04 06:04:36
回答 2查看 622关注 0票数 1

我刚开始关注LambdaJ,很快就遇到了一个问题。我不认为我在做任何奇怪的事情,但我不知道该怎么做。

我有一个管理员列表:

代码语言:javascript
复制
List<Administrator> allAdmins; 

我有一个映射,希望将这些管理员映射到:

代码语言:javascript
复制
Map<String, Administrator> adminIdToAdmin = new HashMap<String, Administrator>();

问题是Administrator类中的is是Long,而不是String。因此,我尝试了以下方法:

代码语言:javascript
复制
adminIdToAdmin = index(allAdmins, on(Administrator.class).getAdministratorId().toString());

这不管用。它会失败,错误为:

代码语言:javascript
复制
ch.lambdaj.function.argument.ArgumentConversionException: Unable to convert the placeholder -2147483647 in a valid argument
    at ch.lambdaj.function.argument.ArgumentsFactory.actualArgument(ArgumentsFactory.java:92)
    at ch.lambdaj.function.convert.ArgumentConverter.<init>(ArgumentConverter.java:29)
    at ch.lambdaj.Lambda.index(Lambda.java:1133)

如果我更改我的地图以包含Long并去掉toString(),错误就会消失。

这样做的正确方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2013-04-05 01:38:26

根据马里奥·福斯科(LambdaJ创建者)的说法:

这是lambdaj的一个众所周知且有充分文档记录的限制:您不能进一步引用像Long这样的最终类,因为它是不可代理的。

两种可用的解决方案是:

  1. 将getAdministratorIdAsString()添加到管理员类
  2. 编写自己的转换器并将其传递给索引方法
票数 1
EN

Stack Overflow用户

发布于 2015-10-15 17:59:48

我遇到了完全相同的问题,使用相同的占位符值:-2147483647。我用集合上的经典迭代替换了将lambdaj提取方法应用于集合的所有元素的代码块,现在我的应用程序可以工作了。我猜这是一个与om.googlecode.lambdaj lambdaj版本2.3.3的2.3.3版本相关的错误。

之前(失败)

代码语言:javascript
复制
 return ch.lambdaj.Lambda.extract(sourceMsg.getAttachments(), on(Attachment.class)
                .getDataHandler().getDataSource())

工作后(工作)

代码语言:javascript
复制
List<DataSource> lds= new ArrayList<DataSource>();
        Collection<Attachment> attachmentList = sourceMsg.getAttachments();
        for(Attachment a:attachmentList)
        {
            result.add(a.getDataHandler().getDataSource());
        }
        return lds;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15799039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档