Hashmap无法循环-找不到getKey()方法-使用Java 8

时间:2018-12-13 22:27:03

标签: java java-8 hashmap java-stream

嗨,我正在使用Java 8,并且尝试创建一个经过过滤的cMap映射表,以便仅存在outerTable列表中的键...任何人都可以。告诉我为什么

public List<String> outerTables = ArrayList<String>() = {{ add("table1"); }}

private Map<String, List<String>> cMap = new HashMap<String, List<String>>();

...(做一些事以cMap的元素填充<String, List<String>>

Map<String, List<String>> cTempMap = new HashMap<String, List<String>>(cMap);

cMap.clear();

cMap.put(cTempMap.entrySet().stream()
    .filter(x -> outerTables.contains(x.getKey()))
    .collect(Collectors.toMap(m -> m.getKey(), m -> m.getValue())));

抛出错误...

Cannot resolve method 'getKey()'

我正在尝试遵循此处的示例-https://www.mkyong.com/java/how-to-loop-a-map-in-java/,并且我的语法看起来相同。谢谢。

2 个答案:

答案 0 :(得分:2)

问题是您正在使用put,而您应该使用putAll

是的,该错误不是很有意义,因为它说“无法解析方法'getKey()'”。

 cMap.putAll(cMap.entrySet()
            .stream()
            .filter(x -> outerTables.contains(x.getKey()))
            .collect(Collectors.toMap(m -> m.getKey(), m -> m.getValue())));

答案 1 :(得分:1)

这是您的操作方法(有方法参考):

List<String> outerTables = new ArrayList<>();
Map<String, List<String>> cMap = new HashMap<String, List<String>>();
Map<String, List<String>> cTempMap = new HashMap<String, List<String>>(cMap);
cMap.putAll(cTempMap.entrySet()
                    .stream()
                    .filter(x -> outerTables.contains(x.getKey()))
                    .collect(Collectors.toMap(
                                     Entry::getKey,
                                    Entry::getValue
                    )));