Ich habe diese Liste Liste (Entschuldigung für die abscheuliche Code) Wie kann ich dies in Lambda umwandeln?Wie konvertiere ich dies in Lambda
List<EmailAddressInformationDataType> emailInfoDataList = workerType.getWorkerData().getPersonalData().getContactData().getEmailAddressDatas();
for(EmailAddressInformationDataType infoData : emailInfoDataList)
{
List<CommunicationMethodUsageInformationDataType> usageInfoList = infoData.getUsageDatas();
for(CommunicationMethodUsageInformationDataType methodUsage : usageInfoList)
{
if(methodUsage.isPublic())
{
List<CommunicationUsageTypeDataType> usageTypes = methodUsage.getTypeDatas();
for(CommunicationUsageTypeDataType usageType : usageTypes)
{
if(usageType.isPrimary())
{
CommunicationUsageTypeObjectType typeRefs = usageType.getTypeReference();
typeRefs.getIDS().stream()
.filter(id -> id.getType().equals(WorkdayDataType.Communication_Usage_Type_ID)
&& id.getValue().equalsIgnoreCase("WORK"));
email = infoData.getEmailAddress();
break;
}
}
}
}
}
Ich habe folgendes versucht, aber immer noch nicht die E-Mail zu erhalten:
emailInfoDataList.stream()
.peek(s -> s.getEmailAddress())
.flatMap(s -> s.getUsageDatas().stream())
.filter(s -> s.isPublic())
.flatMap(s -> s.getTypeDatas().stream())
.filter(s -> s.isPrimary())
.map(s -> s.getTypeReference())
.flatMap(s -> s.getIDS().stream())
.filter(s-> s.getType().equals(WorkdayDataType.Communication_Usage_Type_ID)
&& s.getValue().equalsIgnoreCase("WORK"))
;
1) Verwenden Sie 'peek' nicht, um einen Wert zu erhalten, aber verwenden Sie einen Terminaloperator, z. 'findFirst() .oderElse (...)' 2) FlatMap nicht alles, da Sie Informationen verlieren, während Ihr Bereich kleiner und kleiner wird, streamen Sie stattdessen die ursprüngliche Liste von usageDatas und wenn Sie einen Filter benötigen das benötigt eine innere Schleife, delegiere zu einer anderen Methode, die seinen eigenen Strom aufbaut und die spezifische Prüfung tut –
Dank für den Tipp. Aber könntest du mir ein Beispiel zeigen, wie das geht? – user293655