Я хочу знать, существует ли реализация «извлечения» элементов из реализации коллекции на основе заданного предиката, то есть удаления указанных элементов после извлечения. Чтобы представить, что я имею в виду, рассмотрим следующий вариант использования:
Код: Выделить всё
Set
parentSet = parentDao.getParents();
Set parentIdSet = parentSet.stream().map(Parent::getId).collect(Collectors.toSet())
Set childrenSet = childDao.getChildByParentIds(parentIdSet);
for (Parent parent : parentSet) {
Set childrenOfThisParent = childrenSet
.stream()
.pluck((Child c) -> Objects.equals(parent.getId(), c.getParentId()))
.collect(Collectors.toSet());
parent.setChildren(childrenOfThisParent);
}
// At this line, childSet should be empty.
assert(childrenSet.isEmpty());
Я хочу, чтобы каждая итерация после того, как Set была отфильтрована по его родительскому идентификатору и инициализирована как ChildrenOfThisParent, я хочу, чтобы они были удален из childSet и уменьшите размер() childSet. По сути, поиск в childSet должен быть быстрее на следующей итерации. Хотя на данный момент мне нужно провести тест, чтобы узнать, будет ли более быстрое время поиска существенным.
Подробнее здесь:
https://stackoverflow.com/questions/782 ... ing-stream