Java Stream, как проверить значение карты на длину - PullRequest
1 голос
/ 12 ноября 2019

У меня есть потоковое выражение, которое извлекает значение из карты

String name = map.entrySet().stream()
                  .filter(map -> "fName".equalsIgnoreCase(map.getKey()))
                  .map(map -> map.getValue())
                  .collect(Collectors.joining());

Я хочу знать, как добавить проверку, чтобы увидеть, является ли значение карты пустым или имеет какое-либо значение в нем.

Итак, если map-value для fName является исключением из-за пустого броска, в противном случае укажите значение в переменной name.

Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 12 ноября 2019

Перепишите лямбду с {}, чтобы она могла содержать операторы, например, выбрасывать исключение.

String name = map.stream()
    .filter(entry -> "fName".equalsIgnoreCase(entry.getKey()))
    .map(entry -> {
        String v = entry.getValue();
        if(v == null || v.isEmpty()) {
            throw new IllegalStateException("null or empty value: " + entry.getKey());
        }
        return v;
    })
    .collect(Collectors.joining());
0 голосов
/ 12 ноября 2019

В одном конвейере вы можете справиться с этим, используя RuntimeException чисто. Это будет использовать Optional для проверки значения карты.

String name = inputMap.entrySet().stream()
        .filter(entry -> "fName".equalsIgnoreCase(entry.getKey()))
        .map(entry -> Optional.ofNullable(entry.getValue())
                .filter(v -> !v.isEmpty())
                .orElseThrow(() -> new RuntimeException("Map value is blank!")))
        .collect(Collectors.joining());
0 голосов
/ 12 ноября 2019

Не уверен, что именно означает пустое, но я думаю, что вы можете сделать

 String name = map.entrySet().stream()
                  .filter(map -> "fName".equalsIgnoreCase(map.getKey()))
                  .map(map ->(map.getValue()== null || map.getValue().length() ==0) ? throw new Exception(): map.getVaue())
                  .collect(Collectors.joining());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...