【问题标题】:Error while Calling parent class method using Lambda使用 Lambda 调用父类方法时出错
【发布时间】:2017-07-27 16:58:02
【问题描述】:

这是我的this question的扩展

我想从下面的列表中获取 id,

List allUserGroups = UserBC.getAllGroupsForUser(userId, deptID);

此列表包含我需要类型转换为 GroupData 实体的对象。 GroupData 扩展了其中定义了 getId() 方法的 PartyData。所以我尝试使用labda作为,

allUserGroups.stream()
.map(GroupData.class::cast)
.map(GroupData::getId)

这里的问题是,编译器显示类型 GroupData 没有定义适用于这里的 getId(Object)。

GroupData 类型没有定义这里适用的getId(Object)

正常的for循环可以正常工作,

for(Object userGroup: allUserGroups){
    long usergrp = ((GroupData) userGroup ).getId();
}

谁能建议如何使用 Labmda 实现这一目标

【问题讨论】:

  • 你为什么使用原始列表作为allUserGroups的类型?
  • 这个已经在我们的应用程序中实现了。所以我没有使用通用列表的选项。
  • 由于使用了原始类型而发生此错误。将您的列表转换为通用类型:List<GroupData> allUserGroups = (List<GroupData>) UserBC.getAllGroupsForUser(userId, deptID);,那么您也不再需要第一个 map
  • 不安全的演员表不应该是必要的。 UserBC.getAllGroupsForUser()的返回类型是什么?
  • 那么完全不需要演员阵容;您可以按原样分配结果。如果您想避免编译器警告,您可以将结果分配给List<?>,您的原始代码应该可以工作。这一切都假设你不能修改方法签名,它不应该首先使用原始类型。

标签: java lambda casting functional-programming java-8


【解决方案1】:

在获取 Jespher 评论的列表时使用了类型转换,它解决了我的问题,

List<GroupData> allUserGroups = (List<GroupData>) UserBC.getAllGroupsForUser(userId, deptID);
allUserGroups.stream().map(GroupData::getId)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2016-02-14
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多