Вот несколько подходов, если я понимаю, что вы хотите. Если ключ карты - EntityObject, то он должен переопределить equals, чтобы позаботиться о дублирующих ключах, которые не разрешены. Это можно сделать, используя Id как часть реализации equals (что не очевидно из представленного класса)
Map<EntityObject, Set<EntityObject>> parentChildMap =
itemGroupsMap.entrySet().stream()
.collect(Collectors.toMap(
// get the single parent object and use
// as a key
e -> e.getValue().stream()
.filter(o -> o.isParent)
.findFirst().get(),
// get the value and remove the parent
// key, convert to a set and use as the new
// value.
e -> e.getValue().stream()
.filter(o -> !o.isParent)
.collect(
Collectors.toSet())));
Возможно, есть лучший способ сделать это с потоками, но я предпочитаю следующее как это прямо вперед.
// create the map
Map<EntityObject, Set<EntityObject>> parentChildMap = new HashMap<>();
for (Entry<String, Set<EntityObject>> e : itemGroupsMap
.entrySet()) {
// get the set of EntityObjects
Set<EntityObject> eoSet = e.getValue();
// get the parent one
EntityObject parentObject = eoSet.stream()
.filter(eo->eo.isParent).findFirst().get();
// remove the parent one from the set
eoSet.remove(parentObject);
// add the parentObject and the set to the map
parentChildMap.put(parentObject,eoSet);
}