Переделать foreach в .stream (). Map - PullRequest
       6

Переделать foreach в .stream (). Map

3 голосов
/ 19 сентября 2019

В настоящее время у меня есть два списка List<MonthlyFeePayment> monthlyFeePaymentList и новый List<FeePaymentStatusRequest> request = new ArrayList<>();.Что мне нужно, так это просмотреть все элементы monthlyFeePaymentList и заполнить мой список request.FeePaymentStatus состоит из monthlyFeePaymentId и sourceSystem (что всегда одинаково).

Моя текущая реализация:

List<FeePaymentStatusRequest> request = new ArrayList<>();
    for (MonthlyFeePayment monthlyFeePayment : monthlyFeePaymentList) {
        request.add(new FeePaymentStatusRequest(monthlyFeePayment.getMonthlyFeePaymentId().toString(), "BGW"));
    }

Я хочу сделать это с помощью .stream().map(),но я не могу понять это.Это должно быть довольно легко, учитывая, что это только два списка.Но я не знаю, какой список должен идти первым: request.stream() или monthlyFeePaymentList.stream()?Не могли бы вы объяснить, как Stream#map работает в этой конкретной ситуации?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2019

Вам не нужно создавать вывод List явно.

Stream по вашему вводу List, map каждый MonthlyFeePayment до FeePaymentStatusRequest экземпляра и collect до List:

List<FeePaymentStatusRequest> request = 
    monthlyFeePaymentList.stream()
                         .map(monthlyFeePayment -> new FeePaymentStatusRequest(monthlyFeePayment.getMonthlyFeePaymentId().toString(), "BGW"))
                         .collect(Collectors.toLis());
2 голосов
/ 19 сентября 2019

Тот, по которому вы перебираете:

List<FeePaymentStatusRequest> request = monthlyFeePaymentList.stream()
    .map(monthlyFeePayment -> new FeePaymentStatusRequest(monthlyFeePayment.getMonthlyFeePaymentId().toString(), "BGW"))
    .collect(Collectors.toList());

Вы можете собрать его, не создавая новый список явно.

2 голосов
/ 19 сентября 2019

Операция map для Stream преобразует объект из MonthlyFeePayment в FeePaymentStatusRequest, учитывая способ, который вы уже определили в коде цикла for.

List<FeePaymentStatusRequest> request = monthlyFeePaymentList
          .stream() // Stream<MonthlyFeePayment>
          .map(monthlyFeePayment -> new FeePaymentStatusRequest(
                   monthlyFeePayment.getMonthlyFeePaymentId().toString(), "BGW")) // Stream<FeePaymentStatusRequest>
          .collect(Collectors.toList()); // List<FeePaymentStatusRequest>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...