2017-11-24 1 views
-3

Unten habe ich zwei Listen. Während ich die zwei Listen wiederhole, muss ich eine Bedingung überprüfen, die zu einem Element hinzugefügt wird.Überprüfen Bedingung auf geschachtelte Schleife zur Liste hinzufügen, Java 8

List<EcStgClientRolesRecipients> ecStgRoleList = new ArrayList<>(); 

for (EcStgClientRolesRecipients ecStgClientRolesRecipients : ecStgClientRolesRecipientList) { 
    for (EcStgClientRoles ecStgClientRole : ecStgClientRoleList) { 
     if (ecStgClientRole.getRoleId().equals(ecStgClientRolesRecipients.getRoleId())) {       
      ecStgClientRolesRecipients.setEcStgClientRoles(ecStgClientRole); 
      ecStgRoleList.add(ecStgClientRolesRecipients); 
     } 
    } 
    break; 
} 

return ecStgRoleList; 

Ich habe versucht, in Java 8 Code zu konvertieren, es funktioniert nicht. Was vermisse ich?

List<EcStgClientRolesRecipients> filtedRoleRecipients = new ArrayList<>(); 

Predicate<EcStgClientRolesRecipients> roleRecipientCheck = 
    recipient -> ecStgClientRoleList.stream() 
     .anyMatch(ecStgClientRole -> recipient.getRoleId() == ecStgClientRole.getRoleId()); 

filtedRoleRecipients = ecStgClientRolesRecipientList.stream() 
       .filter(roleRecipientCheck) 
       .collect(Collectors.toList()); 
+2

Können Sie beschreiben, was Sie erreichen wollen? –

+0

Ich wurde versucht, in Java 8 zu verdecken, aber es funktioniert nicht ?? –

+0

ich kann nicht java 8 tag setzen, ich habe keinen ruf 1500 –

Antwort

2

Ich kann zum Beispiel daran denken, aber es ist kaum besser lesbar als eine einfache for-Schleife:

ecStgClientRolesRecipientList.stream() 
      .map(x -> new AbstractMap.SimpleEntry<>(
        ecStgClientRoleList.stream().filter(y -> x.getRoleId().equals(y.getRoleId())).findAny(), x)) 
      .filter(pair -> pair.getKey().isPresent()) 
      .map(pair -> { 
       EcStgClientRolesRecipients e = pair.getValue(); 
       e.setEcStgClientRoles(pair.getKey().get()); 
       return e; 
      }) 
      .collect(Collectors.toList()); 
Verwandte Themen