Java Stream: ¿Cómo encontrar la identificación de json? [duplicar]
Oct 19 2020
Tengo un json como se muestra a continuación y clases similares con respecto a él MyClient:
[
{
"id": 2,
"partners": [
{
"configuration": {
"connect-fleet-sync": false
},
"id": "cf89cbc5-0886-48cc-81e7-ca6123bc4857"
},
{
"configuration": {
"connect-fleet-sync": false
},
"id": "cf89cbc5-0886-48cc-81e7-ca6123bc4967"
}
]
},
{
"id": 3,
"partners": [
{
"configuration": {
"connect-fleet-sync": false
},
"id": "c3354af5-16e3-4713-b1f5-a5369c0b13d6"
}
]
}
]
Necesito un método que reciba el uuid y devuelva id .
Fr ejemplo findClientId("cf89cbc5-0886-48cc-81e7-ca6123bc4967")y luego regresa 2:
Esto es lo que he probado:
public static void findClientId(String partnerId, MyClient[] allMyClients) {
Stream.of(allMyClients)
.map(MyClient::getPartners)
.forEach(Partner::getPartnerId)
.filter(
partner ->partner.id.equals(partnerId)))
.map(MyClient::getId);
}
Pero se queja Non-static method cannot be referenced from a static contexten la fila.forEach(Partner::getPartnerId)
Respuestas
2 ernest_k Oct 20 2020 at 02:34
Primero, Stream.forEaches nulo. No se puede invocar .filterni ningún otro método posterior. Además de eso, .map(MyClient::getPartners)le haría perder MyClientinformación en la tubería mientras es la MyClient.getIdque desea. Tendría que usar una secuencia anidada para filtrar en la lista de socios en cada cliente.
Tu código debe ser:
public static String findClientId(String partnerId, MyClient[] allMyClients) {
return Stream.of(allMyClients)
.filter(client -> client.getPartners()
.stream()
.anyMatch(partner -> partner.getPartnerId().equals(partnerId)))
.map(MyClient::getId)
.findAny()
.orElse(null); // change to whatever is desired
}