Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 Lambda,筛选器哈希映射,无法解析方法_Java_Lambda - Fatal编程技术网

Java 8 Lambda,筛选器哈希映射,无法解析方法

Java 8 Lambda,筛选器哈希映射,无法解析方法,java,lambda,Java,Lambda,我对Java8的新特性有点陌生。我正在学习如何按条目过滤地图。我已经考虑并解决了我的问题,但我无法解决 @Test public void testSomething() throws Exception { HashMap<String, Integer> map = new HashMap<>(); map.put("1", 1); map.put("2", 2); map = map.entrySet() .p

我对Java8的新特性有点陌生。我正在学习如何按条目过滤地图。我已经考虑并解决了我的问题,但我无法解决

@Test
public void testSomething() throws Exception {
    HashMap<String, Integer> map = new HashMap<>();
    map.put("1", 1);
    map.put("2", 2);
    map = map.entrySet()
            .parallelStream()
            .filter(e -> e.getValue()>1)
            .collect(Collectors.toMap(e->e.getKey(), e->e.getValue()));
}
@测试
public void testSomething()引发异常{
HashMap=newHashMap();
地图.放(1,1);;
地图放置(“2”,2);
map=map.entrySet()
.parallelStream()
.filter(e->e.getValue()>1)
.collect(Collectors.toMap(e->e.getKey(),e->e.getValue());
}
但是,我的IDE(IntelliJ)表示“无法解析方法‘getKey()’”,因此无法编译:

这也无助于:
有人能帮我解决这个问题吗?
谢谢

该消息具有误导性,但您的代码由于另一个原因未编译:
collect
返回
Map
而不是
HashMap

如果你使用

Map<String, Integer> map = new HashMap<>();
Map Map=newhashmap();

它应该按预期工作(同时确保您具有所有相关导入)。

您返回的是Map而不是hashMap,因此您需要将
Map
类型更改为
java.util.Map
。此外,您可以使用方法引用,而不是调用getKey、getValue。例如

Map<String, Integer> map = new HashMap<>();
        map.put("1", 1);
        map.put("2", 2);
        map = map.entrySet()
                .parallelStream()
                .filter(e -> e.getValue() > 1)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
intellij创建的变量将是精确的类型,您将得到

Map<String, Integer> collect = map.entrySet()
        .parallelStream()
        .filter(e -> e.getValue() > 1)
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Map collect=Map.entrySet()
.parallelStream()
.filter(e->e.getValue()>1)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

如果我可以问的话。。e到底是什么。。不要在任何地方声明它。@tobias_k,关于泛型不应该是个问题。它应该根据@FlorentBayle添加铸造(HashMap)帮助工作!显然,编译器需要一段时间才能充分了解错误的真正原因。目前相当令人沮丧……如果我们向下转换.collect by(HashMap)返回的内容,它似乎可以工作。但是关于强制转换有什么问题吗?我总是喜欢从接口、列表、映射e.t.c.生成数据结构。@Daniel收集器不会对返回的类型提供任何保证-因此它现在可能工作,将来可能会中断。
消息具有误导性
:这挽救了我的一天。我使用的是
toSet()
,我应该使用
toList()
。这条消息确实令人困惑。ctrl+alt+v真是太棒了
Map<String, Integer> collect = map.entrySet()
        .parallelStream()
        .filter(e -> e.getValue() > 1)
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));