嗨,我正在使用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/,并且我的语法看起来相同。谢谢。
答案 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
)));