Java 8, сравните две карты и верните результат - PullRequest
0 голосов
/ 11 октября 2018

Я сравниваю 2 карты с использованием функций Java 8 и в зависимости от условия хочет вернуть результат.Использование .forEach показывает ошибку времени компиляции и, в основном, возврат возвращается из лямбда-выражения, а не из цикла.Как я могу вернуться из цикла, охватывающего лямбду?
Обратите внимание, что я не сравниваю равенство для двух объектов карты

nMap.forEach((k,v) -> {
    if (!mMap.containsKey(k) || mMap.get(k) < v) {
        return -1;
    }
});

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Другой подход, использующий Stream, который фильтрует записи в соответствии с заданным условием.Результатом потоковой передачи является Optional, который может содержать найденное Entry:

if (nMap.entrySet().stream()
        .filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
        .findAny()
        .isPresent()) {
    return -1;
}
0 голосов
/ 11 октября 2018

Используйте Stream из entrySet() и anyMatch вместо forEach:

boolean found = 
    nMap.entrySet()
        .stream()
        .anyMatch(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue());
if (found)
    return -1;
...