У меня есть 2 списка.
List<Email> emailList emailList = getEmails();
List<FileData> fileList = getFileList();
public class Email {
private String email;
private String name;
private String type;
private Set<Permissions>;
//getter and setter
}
public class Permissions {
private String permissionType;
private String level;
//getter and setter
}
public class FileData {
private String email;
private String type;
//getter and setter
}
Мне нужно выполнить итерацию по списку, чтобы найти электронное письмо из списка и вызвать метод setPermissionType (), и если нет совпадения с электронным письмом, которое нужно выдать NotFoundException. Как мы можем сделать это с Java потоками?
Лог c, который у меня на данный момент есть.
for (final FileData fileData: fileList ) {
Email email= emailDao.findByEmail(fileData.getEmail()); //throws NotFoundException
final Set<Permissions> permissions = email.getPermissions();
permissions.removeIf(p -> p.getPermissionType() == fileData.getType());
email.setPermissions(permissions);
}
В вышеприведенных логах c Я делаю БД звонит в течение l oop. Я должен избежать этого, используя предложение IN.
List<String> emailStringList = fileList.stream()
.map(file -> Objects.toString(file.getEmail()))
.collect(Collectors.toList());
List<Email> emailList= emailDao.findByEmailIn(emailStringList);