2 回答
TA贡献1995条经验 获得超2个赞
像这样的东西应该有效:
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。
警告:我觉得如果没有流的选项更干净并且能完成工作,我会选择它。鉴于这里需要的操作相当复杂,从长远来看,保持其可读性比巧妙的做法更有好处。
TA贡献1909条经验 获得超7个赞
get另一种稍微改进当前答案的方法可能是在没有检查的情况下不执行 a isPresent。filter这可以通过使用和来实现map
Map<Part, Map<String, String>> collectingPartMap = partList.stream()
.map(part -> partDetailsHMap.values().stream()
.filter(innerMap -> innerMap.containsValue(part.getPartId())) // notice 'getPartId' for the access
.findFirst()
.map(firstInnerMap -> new AbstractMap.SimpleEntry<>(part, firstInnerMap)))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
添加回答
举报