如何检索此列表的 n 个大小元素?

How can I retrieve the n size elements of this list?

我有以下代码检索 getNames.get(x) 中的值,getNames() 的类型为 List<String>。要求是根据 getNames() 的大小创建一个帐户。这可以从 1 到 x 不等,所以与其写在下面,我如何使用流来适应这个?如果做不到这一点,也许一个循环就足够了。最终结果应该以getNames()的大小为准,createAccount()被调用的次数相同

    public List<Account> buildAccounts(MetaData metaData){
return List.of(
    createAccount(metaData.getNames().get(0)), 
    createAccount(metaData.getNames().get(1)), 
    createAccount(metaData.getNames().get(2)));
}

public Account createAccount(String name){
....
}

可以使用metaData.getNames().stream.collect(Collectors.counting());

计算长度

看起来很适合map

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

顺便说一句

The length can be calculated using metaData.getNames().stream.collect(Collectors.counting());

当您可以简单地执行 metaData.getNames().size().

时,这会很奇怪

您可以使用 Stream#map

Returns a stream consisting of the results of applying the given function to the elements of this stream.

return metaData.getNames().stream()
    .map(name -> createAccount(name)).collect(Collectors.toList());

在Java 16+中,collect调用可以缩短为.toList()

对于列表的大小你可以使用size()方法metaData.getNames().size();

用于创建帐户

public List<Account> buildAccounts(MetaData metaData) {
    return metaData.getNames()
            .stream()
            .map(this::createAccount)
            .collect(Collectors.toList());
}

for-each 循环的另一种方法(增强的 for 循环)

public List<Account> buildAccounts(MetaData metaData) {
    List<String> names = metaData.getNames();
    List<Account> accounts = new ArrayList<>(names.size());

    for (String name : names) {
        var account = createAccount(name);
        accounts.add(account);
    }

    return accounts;
}