Java Stream: como encontrar o id do json? [duplicado]
Oct 19 2020
Eu tenho um json como abaixo e classes semelhantes a ele 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"
}
]
}
]
Preciso de um método que receba o uuid e retorne id .
Fr exemplo findClientId("cf89cbc5-0886-48cc-81e7-ca6123bc4967")e então retorna 2:
Aqui está o que tentei:
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);
}
Mas reclama Non-static method cannot be referenced from a static contextna fila.forEach(Partner::getPartnerId)
Respostas
2 ernest_k Oct 20 2020 at 02:34
Primeiro, Stream.forEachestá vazio. Você não pode invocar .filterou qualquer outro método depois disso. Além disso, .map(MyClient::getPartners)faria com que você perdesse MyClientinformações no pipeline no momento em MyClient.getIdque você deseja. Você teria que usar um fluxo aninhado para filtrar na lista de parceiros em cada cliente.
Seu código deve 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
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas