У меня есть список объектов документов, которые необходимо сопоставить на основе определенных критериев. Существует служебная функция, которая берет любые 2 типа документов и определяет, соответствуют ли они по ряду критериев, например, по жанру документа, разделяют ли они авторов и т. Д. c. Код работает, но я хотел бы использовать Java Streams для его решения, если это возможно.
В настоящее время я решаю эту проблему с помощью следующего кода:
class Document{
private String genre;
private List<Author> authors;
private String isbn;
private boolean paperBack;
...
}
Я также использую Утилита библиотеки, которая имеет функцию, которая возвращает значение true, учитывая ряд соответствующих критериев и пару документов. Он просто возвращает логическое значение.
boolean matchesOnCriteria(Document doc1, Document doc2, Criteria criteria){
...
}
Вот соответствующий код для поиска книг, соответствующих заданным критериям
DocumentUtils utils = DocumentUitls.instance();
Criteria userCriteria = ...
List<Pair> matches = new ArrayList<>();
List<Document> documents = entityManager.findBy(.....);
for(Document doc1 : documents){
for(Documents doc2 : documents){
if(!doc1.equals(doc2){
if (utils.matchesOnCriteria(doc1,doc2, userCriteria)) {
Pair<Document> p = new Pair(doc1,doc2);
if(!matches.contains(p)){
matches.add(p);
}
}
}
}
}
}
Как я могу сделать это с помощью потоков?