Preguntas sobre este fragmento de código Java, por qué está escrito tal como está

Encontré este código fuente y quería asegurarme de que entendía por qué está escrito tal como está (o si debería estarlo):

boolean modified = false;
Set<String> possibleSites = settings.getPossibleSites();
Set<String> visibleSites = settings.getVisibleSites();
modified = someMysteriousMethod();

// Remove sites from visibleSites that are not in possibleSites
modified |= visibleSites.retainAll(possibleSites);

Mis preguntas sobre la ÚLTIMA declaración:

  1. ¿Por qué usar el operador bit a bit? RetenAll () devolverá un valor booleano de lo que sucedió.

  2. ¿Qué dice el operador / declaración? Si modificado es igual al valor de retorno, ¿deja solo el valor de modificado O si el valor de retorno es diferente, se modificará ese nuevo valor?

Respuesta 1
boolean retainAll(Collection<?> c)

devuelve truesithe set changed as a result of the call

modified |= visibleSites.retainAll(possibleSites);

Entonces, la declaración anterior significa que si modifiedes verdadero O retainAlldevuelve verdadero , entonces modifiedse establece en verdadero , de lo contrario, el valor de modifiedes falso

Respuesta: 2

Se quería decir que si cualquiera modifiedo retainAll()es cierto, entonces modifieddebe ser cierto. (Lo que tiene sentido dado el nombre. retainAllSolo devuelve verdadero si Setse cambió, y someMysteriousMethodprobablemente devuelve verdadero o falso dependiendo de si Setse cambió el estado del .)

El código se descompone en:

modified = modified | visibleSites.retainAll(possibleSites);

Mira el siguiente código para ver los resultados de los |booleanos:

System.out.println(true|true);
System.out.println(false|true);
System.out.println(true|false);
System.out.println(false|false);

Salida:

true
true
true
false

(Solo false|falseregresará false, por lo que en el código, ambos modifiedy retainAlltendrán que devolver falso para modifiedser false)

Respuesta: 3

El valor de retorno del retainAllmétodo enSet indica si la llamada cambió el conjunto.

Devoluciones:

true si este conjunto cambió como resultado de la llamada

Aquí, trueindica que el conjunto fue modificado. El |=operador compuesto realiza un "o" en los argumentos y lo asigna nuevamente al lado izquierdo. Con su caso, eso significa que si retainAllregresa true, luego truevuelva a asignarlo modifiedo déjelo modifiedsin cambios.

Respuesta: 4

Según el javadoc,

retainAllse vuelve a ejecutar truesi este conjunto cambió como resultado de la llamada

a |= bes una operación que afecta el resultado de " a or b" a a. Por lo tanto, en su situación, la idea es afectar modifiedel resultado de la declaración " visibleSitesse modificó antes OR visibleSitesde retainAll"

Respuesta: 5

Quiero mostrar todos los clientes almacenados en archivos de texto, pero un cliente está almacenado en muchos archivos de texto y se muestra más de una vez. ¿Cómo eliminar duplicados de estos clientes? Yo he tratado ...

Estoy tratando de perfilar una JVM remota con VisualVM 1.4. Estoy ejecutando macOS High Sierra 10.13.6 localmente, con la siguiente versión de OpenJDK: java -version openjdk versión "1.8.0_181" OpenJDK Runtime ...

Estoy trabajando en la base de datos postgresql, necesito convertir un tipo de datos MYSQL Blob en un byte PostgreSQL usando código java solo ¿hay alguna forma de hacerlo?

Cuando intento analizar el encabezado de jwt como base64 a cadena, la salida es: {"alg": "RS256", "typ": "JWT", "kid": "1234" sin el último paréntesis, pero cuando decodifico el misma cadena base64 por ejemplo aquí: ...