Saya memiliki kode di bawah ini yang mengambil nilai dalam getNames.get(x), getNames() bertipe List<String>. Syaratnya adalah membuat akun, berdasarkan ukuran getNames(). Ini dapat bervariasi dari 1 hingga x, jadi daripada menulis di bawah ini, bagaimana saya bisa menggunakan aliran untuk mengakomodasi ini? Gagal itu, mungkin satu lingkaran sudah cukup. Hasil akhir harus didasarkan pada ukuran getNames(), createAccount() disebut dengan jumlah yang sama.

    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){
....
}

Panjangnya dapat dihitung menggunakan metaData.getNames().stream.collect(Collectors.counting());

1
IveGotCodeButImNotACoder 2 Juli 2021, 20:41

1 menjawab

Untuk ukuran daftar Anda dapat menggunakan metode size() metaData.getNames().size();

Untuk membuat akun

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

Pendekatan lain dengan for-each loop (ditingkatkan untuk loop)

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;
}
1
djm.im 2 Juli 2021, 18:18