为了账号安全,请及时绑定邮箱和手机立即绑定

尝试映射列表时出现不兼容类型错误

尝试映射列表时出现不兼容类型错误

鸿蒙传说 2023-03-17 13:48:03
我有一个要填写的 FeeAccount 列表。我想使用 .stream.map() 来完成它。我设法做的是创建一个方法来映射我的列表并将其返回。我使用在网上找到的其他一些示例编写了这段代码。我的问题是它以某种方式返回了一个与 List 不兼容的列表。我收到一个错误:不兼容的类型。必需列表,但“映射”被推断为流:不存在类型变量 R 的实例,因此流符合列表据我了解,问题出在我使用collect(Collectors.toList()) 的部分。但我不确定。我什至不清楚错误消息的含义。也许有人可以解释我做错了什么?它与 .stream.map() 一起使用吗?因为我以前从未使用过它。或者也许问题出在其他地方。Method(List<contract> contractList){ List<FeeAccount> feeAccounts = new ArrayList<>();    feeAccounts = contractList            .stream()            .map(contract -> {                List<Fee> monthlyFees=...;                return monthlyFees.stream()                        .map(monthlyFee -> {                            FeeAccount account = new FeeAccount();                            account.setFeeCode(monthlyFee.getFeeCode());                            account.setDebtorAccount(contract.getDebtorAccount());                            return account;                        }).collect(Collectors.toList());            });}
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您有两个嵌套map操作。外部将 a 转换contract为 a List<FeeAccount>,内部将 a 转换Fee为 a FeeAccount。


因此,您的管道导致Stream<List<FeeAccount>>没有终端操作。


如果你.collect(Collectors.toList())在最后添加一个,你会得到一个List<List<FeeAccount>>.


如果您想将所有这些内部列表合并到一个输出列表中,您应该使用flatMap.


获得单位List:


List<FeeAccount> feeAccounts = 

    contractList.stream()

                .flatMap(contract -> {

                    List<Fee> monthlyFees=...;

                    return monthlyFees.stream()

                                      .map(monthlyFee -> {

                                          FeeAccount account = new FeeAccount();

                                          account.setFeeCode(monthlyFee.getFeeCode());

                                          account.setDebtorAccount(contract.getDebtorAccount());

                                          return account;

                                      });

                })

                .collect(Collectors.toList();


查看完整回答
反对 回复 2023-03-17
?
POPMUISE

TA贡献1765条经验 获得超5个赞

map()是流管道中的中间操作(请参阅流操作和管道),这意味着它返回一个流。

feeAccounts = contractList

           .stream()

           .map(...) // result of this operation is Stream<<List<FeeAccount>> 

and not a List<FeeAccount>

您缺少终端操作,例如.collect(Collectors.toList():


List<FeeAccount> feeAccounts = contractList

           .stream()

           .flatMap(monthlyFees -> monthlyFees.stream()

                        .map(monthlyFee -> {

                            FeeAccount account = new FeeAccount();

                            account.setFeeCode(monthlyFee.getFeeCode());

                            account.setDebtorAccount(contract.getDebtorAccount());

                            return account;

                        })

           .collect(Collectors.toList());

flatMap转换Stream<Stream<FeeAccount>>Stream<FeeAccount>



查看完整回答
反对 回复 2023-03-17
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信