Статическое действие и Отрыв от потока Java 8 forEach на HashMap? - PullRequest
0 голосов
/ 27 сентября 2019

При использовании внешней итерации над Iterable мы используем статическое действие и цикл «Прервать от улучшенного для каждого» следующим образом:

for (Entry<String, String> w : Context.getWindows().entrySet()) {
    if (w.getValue().equals(Context.getDriver().getWindowHandle())) {
        Context.removeWindow(w.getKey());
        break;
    }
}
Context.getDriver().close();

Как можно разорвать или вернуть, используя внутреннюю итерацию в лямбда-выражении Java 8, например:

Context.getWindows().forEach(obj -> {
   //what to do here?
})

Я нахожу другой вопрос по https://stackoverflow.com с stream() filter и findFirst, но это решение возвращает объект.В моем случае я хочу выполнить статическое действие и прервать;

Optional<SomeObject> result =
    Context.getWindows().stream().filter(obj -> some_condition_met).findFirst();

1 Ответ

4 голосов
/ 27 сентября 2019

Это должно означать что-то вроде

Context.getWindows().entrySet().stream()
    .filter(e -> e.getValue().equals(Context.getDriver().getWindowHandle()))
    .map(e -> e.getKey())
    .findFirst()
    .ifPresent(k -> Context.removeWindow(k));
Context.getDriver().close();

Или, более кратко

Context.getWindows().entrySet().stream()
    .filter(e -> e.getValue().equals(Context.getDriver().getWindowHandle()))
    .map(Map.Entry::getKey)
    .findFirst()
    .ifPresent(Context::removeWindow);
Context.getDriver().close();
...