Specifi c элементов массива, соответствующих нескольким условиям и возвращающих логическое значение - PullRequest
0 голосов
/ 22 января 2020

Я хочу наиболее оптимизированный и простой способ сделать этот код в Java 8:


(Authentication auth, HttpServletRequest request, ....)

...

Cookie cookies[] = request.getCookies();
if (cookies != null) {

    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("_id")) {
            boolean bool_1 = isIdCookieValid(cookie, auth);
        }
        else if (cookie.getName().equals("XSRF-TOKEN")) {
            boolean bool_2 = isXSRFTokenValid(cookie, request);
        }
    }

    if (bool_1 && bool_2) {
        System.out.println("Ok");
    }
    // else if they are not both true do nothing
}

Может быть, с классом Stream?

Ответы [ 2 ]

1 голос
/ 22 января 2020

Возможно, есть более простой способ:

  • Просто замените
Cookie cookies[] = request.getCookies();
if (cookies != null) {

    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("_id")) {
            boolean bool_1 = isIdCookieValid(cookie, auth);
        }
        else if (cookie.getName().equals("XSRF-TOKEN")) {
            boolean bool_2 = isXSRFTokenValid(cookie, request);
        }
    }

    if (bool_1 && bool_2) {
        System.out.println("Ok");
    }
    // else if they are not both true do nothing
}
  • на
Cookie[] cookies = request.getCookies();
if (cookies != null) {
    boolean bool = Arrays.stream(cookies)
                         .filter(cookie -> 
                            (cookie.getName().equals("_id") ? 
                              isIdCookieValid(cookie, auth) : 
                              cookie.getName().equals("XSRF-TOKEN") && 
                                isXSRFTokenValid(cookie, request)))
                         .count() == 2;

    System.out.println(bool ? "Ok" : "")
}
1 голос
/ 22 января 2020

Вы можете завершить задачу раньше, если знаете, что либо:

  1. Результат boolean равен false
  2. Вы вычислили оба логических значения

Er go:

// Use wrapped Booleans to distinguish between true, false and "no value yet"
Boolean bool_1 = null;
Boolean bool_2 = null;
Cookie cookies[] = request.getCookies();
if (cookies != null) {
    for (Cookie cookie : cookies) {
        if (cookie.getName().equals("_id")) {
            bool_1 = isIdCookieValid(cookie, auth);
            if (!bool_1) {
                break;
            }
        }
        else if (cookie.getName().equals("XSRF-TOKEN")) {
            bool_2 = isXSRFTokenValid(cookie, request);
            if (!bool_2) {
                break;
            }
        }
        if (bool_1 != null && bool_2 != null) {
            break;
        }
    }

    if (bool_1 != null && bool_1 != null && bool_1 && bool_2) {
        System.out.println("Ok");
    }
    // else if they are not both true do nothing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...