从根据 List<String> 过滤的嵌套 HashMap<String, HashMap

我有一个嵌套的 String HashMap 和一个对象列表。该对象有一个 String 属性,用于与内部 HashMap 的值进行匹配。


stream()我正在尝试使用Collectors以下 java 代码找到一个单独的衬垫


HashMap<String, HashMap<String, String>>PartDetailsHMap=new HashMap<String, HashMap<String, String>>()

List<Part> partList=new ArrayList<Part>();



for(int i=0;i<partList.size();i++)

    String partId = partList.get(i).getPropertyValue("part_id");

    for(HashMap< String, String> PartPropsHMap:PartDetailsHMap.values())

    {

        if(PartPropsHMap.containsValue(itemId))

        {

            collectingPartMap.put(partList.get(i), PartPropsHMap);

            break;

        }

    }

}

如果需要,我可以提取List<String>.


正在寻找一款使用 的单衬管stream()。


慕容708150
浏览 88回答 2
2回答

拉风的咖菲猫

像这样的东西应该有效:&nbsp; &nbsp; Map<String, Map<String, String>> PartDetailsHMap = new HashMap<>();&nbsp; &nbsp; List<Part> partList = new ArrayList<>();&nbsp; &nbsp; Map<Part, Map<String, String>> collectingPartMap = partList.stream()&nbsp; &nbsp; &nbsp; .map(part -> PartDetailsHMap.values()&nbsp; &nbsp; &nbsp; &nbsp; .stream()&nbsp; &nbsp; &nbsp; &nbsp; .filter(partPropsHMap -> partPropsHMap.containsValue(part.getPropertyValue("part_id")))&nbsp; &nbsp; &nbsp; &nbsp; .findFirst()&nbsp; &nbsp; &nbsp; &nbsp; .map(partPropsHMap -> new SimpleEntry<Part, Map>(part, partPropsHMap))&nbsp; &nbsp; &nbsp; &nbsp; .get()&nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; &nbsp; .collect(toMap(Map.Entry::getKey, Map.Entry::getValue));我使用了SimpleEntry类来AbstractMap将上下文Part以及我们找到的地图传递给下一个操作 - collect。警告:我觉得如果没有流的选项更干净并且能完成工作,我会选择它。鉴于这里需要的操作相当复杂,从长远来看,保持其可读性比巧妙的做法更有好处。

jeck猫

get另一种稍微改进当前答案的方法可能是在没有检查的情况下不执行 a isPresent。filter这可以通过使用和来实现mapMap<Part, Map<String, String>> collectingPartMap = partList.stream()&nbsp; &nbsp; &nbsp; &nbsp; .map(part -> partDetailsHMap.values().stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(innerMap -> innerMap.containsValue(part.getPartId())) // notice 'getPartId' for the access&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .findFirst()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(firstInnerMap -> new AbstractMap.SimpleEntry<>(part, firstInnerMap)))&nbsp; &nbsp; &nbsp; &nbsp; .filter(Optional::isPresent)&nbsp; &nbsp; &nbsp; &nbsp; .map(Optional::get)&nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java