У меня есть два класса:
@Getter
@Setter
class Class
{
private Long id;
private String someValue;
private List<SubClass> subclasses;
}
@Getter
@Setter
class SubClass
{
private Long id;
private String someSearchValue;
}
Мне нужно найти сначала Class
и сначала SubClass
, где какое-то значение соответствует полю SubClass.someSearchValue
.
Это то, что сделал:
void someMethod(List<Class> classes){
SubClass foundSubClass = classes.stream()
.flatMap(c -> c.getSubclasses().stream())
.filter(sc -> "someValueToSearch".equals(sc.getSomeSearchValue()))
.findFirst().get();
Class someClass = classes.stream()
.filter(c -> c.getSubclasses().stream().anyMatch(sc -> "someValueToSearch".equals(sc.getSomeSearchValue())))
.findFirst().get();
}
Как видите, я должен дважды использовать filter
, используя это же условие "someValueToSearch".equals(sc.getSomeSearchValue())
, чтобы найти оба объекта.Есть ли возможность найти оба объекта, используя filter
только один раз?Я знаю, что самый простой способ сделать это - поместить ссылку на Class
в Subclass
, но я не могу этого сделать.
Есть идеи?