Могу ли я заменить это на l oop с помощью ForEach - PullRequest
0 голосов
/ 04 августа 2020

Следующий код работает нормально, но из любопытства мне было интересно, могу ли я заменить For l oop на ForEach

private static List<SubjectRole> getSubjectRoles(List<ca.payment.simulator.model.api.SubjectRole> subjectRoles) {
    List<SubjectRole> subjectRoleList = new ArrayList<>();

    for (ca.payment.simulator.model.api.SubjectRole subjectRole : subjectRoles) {
        SubjectRole subjectRoleStream = new SubjectRole();
        subjectRoleStream.setSubjectRole(subjectRole.getSubjectRole());
        subjectRoleList.add(subjectRoleStream);
    }

    return subjectRoleList;
}

1 Ответ

0 голосов
/ 05 августа 2020

Можно, но вряд ли это сделает код более читабельным. С Stream.forEach():

        List<SubjectRole> subjectRoleList = new ArrayList<>();

        subjectRoles.stream()
            .forEach(t -> {
                    SubjectRole subjectRoleStream = new SubjectRole();
                    subjectRoleStream.setSubjectRole(t.getSubjectRole());
                    subjectRoleList.add(subjectRoleStream);
                });
        }

        return subjectRoleList;

Вы можете использовать .map() / .collect(), чтобы API Streams управлял выделением List:

        List<SubjectRole> subjectRoleList =
            subjectRoles.stream()
            .map(t -> {
                    SubjectRole subjectRoleStream = new SubjectRole();
                    subjectRoleStream.setSubjectRole(t.getSubjectRole());
                    return subjectRoleStream;
                })
            .collect(Collectors.toList());

        return subjectRoleList;

Для большей краткости, вам нужно как-то объединить создание и атрибут, установленный для одного вызова (метода или конструктора). Если метода не существует, вы можете создать частного помощника:

    private static List<SubjectRole> getSubjectRoles(List<ca.payment.simulator.model.api.SubjectRole> subjectRoles) {
        List<SubjectRole> subjectRoleList =
            subjectRoles.stream()
            .map(t -> copy(t))
            .collect(Collectors.toList());

        return subjectRoleList;
    }

    private static SubjectRole copy(SubjectRole in) {
        SubjectRole out = new SubjectRole();

        out.setSubjectRole(in.getSubjectRole());

        return out;
    }
...