2017-11-24 1 views
-3

以下に2つのリストがあります。 2つのリストをループしている間、私は1つの要素に条件を追加する必要があります。ネストされたループの条件をチェックして、リストに追加します。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; 

私はJava 8コードに変換しようとしていますが、動作しません。私は何が欠けていますか?

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

はあなたが達成しようとしているかを説明することはできますか? –

+0

私はJava 8で秘密にしようとしましたが、動作していませんか? –

+0

私はjava 8タグを置くことができません、私は評判がありません1500 –

答えて

2

私は、例えば、この考えることができますが、それはループのための単純なよりほとんどより読みやすいです:

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()); 
関連する問題