Java Akışı: json'dan id nasıl bulunur? [çiftleme]
Oct 19 2020
Aşağıdaki gibi bir json ve buna saygı duyan benzer sınıflar var 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"
}
]
}
]
Uuid'i alan ve id döndüren bir yönteme ihtiyacım var .
Fr örneği findClientId("cf89cbc5-0886-48cc-81e7-ca6123bc4967")ve sonra şunu döndürür 2:
İşte denediğim şey:
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);
}
Ama Non-static method cannot be referenced from a static contextçizgide şikayet ediyor.forEach(Partner::getPartnerId)
Yanıtlar
2 ernest_k Oct 20 2020 at 02:34
Birincisi, Stream.forEachboşluktur. Ondan .filtersonra veya başka bir yöntemi çağıramazsınız . Bunun yanı sıra, .map(MyClient::getPartners)istediğiniz MyClientsırada boru hattındaki bilgileri kaybetmenize neden olur MyClient.getId. Her istemcideki iş ortağı listesini filtrelemek için iç içe geçmiş bir akış kullanmanız gerekir.
Kodunuz şöyle olmalıdır:
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
}
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'