如何修改此streams方法以返回对象而不是列表< object>?

vkc1a9a2  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(359)

我有下面的代码,我想包括 getNames 中的方法 List.ofbuildAccounts() ,但是,当我尝试此操作时,我得到一个错误,表示所需类型的 List<Account> 与提供的不匹配 List <Object> . 我已经尝试更改了 getNames()Account 加入 findAny().orElse(null) 它返回对象而不是列表,但此方法不再在中生成正确的输出 List 格式。我的问题是,我需要做哪些更改才能允许 getNames() 用于 buildAccounts List.of 在不改变输出的情况下 getNames() ?

public List<Account> buildAccounts(MetaData metaData){
return List.of(
    createAccount(metaData.getAccountName(), metaData.getaccountType()), getNames(metaData, metaData.getaccountType()));
}

public List<Account> getNames(MetaData metadata, AccountType type){
return metaData.getNames().stream()
                              .map(n -> createAccount(n, type))
                              .collect(Collectors.toList());
}

    public Account createAccount(String name, AccountType accountType){
....
}
eiee3dmh

eiee3dmh1#

在我看来,你似乎试图添加一个 Account (由 createAccount(...) )到 List 属于 Account (由 getNames(...) ).
但它不是这样工作的。 List.of 获取任意数量的相同类型的元素并生成 List 是的。
你需要这样的东西:

public List<Account> buildAccounts(MetaData metaData){
  List<Account> list = new ArrayList<>(getNames(metaData, metaData.getAccountType()));
  list.add(0, createAccount(metaData.getAccountName(), metaData.getAccountType()));
  return list;
}
2wnc66cl

2wnc66cl2#

您的问题是list.of不能那样使用。如果getnames的输出无法更改,则需要更改buildaccounts,而不要使用list.of here。
因为您已经将这个问题标记为流,并在其他函数中使用流,所以一种方法是在buildaccounts中创建两个流并将它们合并。

public List<Account> buildAccounts(MetaData metaData){
  Stream firstStream =
    Stream.of(createAccount(metaData.getAccountName(), metaData.getaccountType()));
  Stream secondStream =
    getNames(metaData, metaData.getaccountType()).stream();
  return Stream.concat(firstStream, secondStream).collect(Collectors.toList());
}
wgeznvg7

wgeznvg73#

在我看来,下面的内容和你想要达到的目标是一样的?

public List<Account> buildAccounts(MetaData metaData){
           List<Account> accounts = getNames(metaData, metaData.getAccountType());
           accounts.add(createAccount(metaData.getAccountName(), metaData.getaccountType()));
           return accounts;

        }

相关问题