Как я могу преобразовать его в формат лямбда Java? - PullRequest
0 голосов
/ 26 мая 2020

Я пишу Java код. Я хотел бы заменить приведенный ниже оператор for лямбда-кодом Java. Как это сделать?

Спасибо.

public void test() {
    List<Integer> sellIdList = Arrays.asList(2, 1);
    List<List<Integer>> settingIdListByGroup = Arrays.asList(
            Arrays.asList(4, 7, 3, 2, 9), Arrays.asList(8, 21, 1, 15, 13));

    for(List<Integer> settingIdList : settingIdListByGroup) {
        for(int i = 0; i < settingIdList.size(); i++) {
            for(int sellId : sellIdList) {
                if(settingIdList.get(i) == sellId) {
                    settingIdList.set(i, -1);
                }
            }
        }
    }

    log.debug("{}", settingIdListByGroup);
}

результат: [[4, 7, 3, -1, 9], [8, 21, -1, 15, 13]]

1 Ответ

2 голосов
/ 26 мая 2020

Во-первых, sellIdList будет намного лучше Set, если вы хотите проверить совпадения в нем.

Вам потребуются две операции карты. Внутренний будет отображать каждый внутренний список в новый с элементами, замененными на -1. Внешний просто соберет эти списки в новый.

Например,

final Set<Integer> sellIdSet = Set.of(2, 1);
final List<List<Integer>> settingIdListByGroup = List.of(
        List.of(4, 5, 3, 2, 9), List.of(8, 21, 1, 15, 13));

final List<List<Integer>> newList = settingIdListByGroup.stream()
        .map(settingIdList -> settingIdList.stream()
                .map(i -> sellIdSet.contains(i) ? -1 : i)
                .collect(Collectors.toList()))
        .collect(Collectors.toList());

Я бы не рекомендовал пытаться заменить значения в исходных списках. Для этого вам все равно придется использовать простой for l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...