Примерно так должно работать:
Map<String, Map<String, String>> PartDetailsHMap = new HashMap<>();
List<Part> partList = new ArrayList<>();
Map<Part, Map<String, String>> collectingPartMap = partList.stream()
.map(part -> PartDetailsHMap.values()
.stream()
.filter(partPropsHMap -> partPropsHMap.containsValue(part.getPropertyValue("part_id")))
.findFirst()
.map(partPropsHMap -> new SimpleEntry<Part, Map>(part, partPropsHMap))
.get()
)
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
Я использовал SimpleEntry
класс в AbstractMap
для переноса контекста Part
вместе с картой, которую мы нашли, к следующемуоперация - collect
.
Предостережение: я чувствую, если вариант без потоков будет чище и сделает свою работу, я бы пошел с этим. Учитывая, что манипуляции, которые вам здесь нужны, довольно сложны, в долгосрочной перспективе было бы полезно сделать их более читабельными, чем что-то умное.