Eclipse Mars使用流时使用Map.Entry方法的bug?

时间:2016-05-19 14:48:42

标签: java eclipse java-stream

我从流中收集时无法看到Entry getKey()getValue()方法,因为Eclipse只提供Object方法,尽管所有方法都是正常编译的。

someMap.entrySet().stream()
                  .filter( entry -> entry.getKey().isConsumed() || entry.getKey().getSurvivalCount() > 0)

                   // this compiles but auto-completion only offers object methods
                  .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));

这是Eclipse的错误还是我错过了什么?

我正在使用: 版本:Mars.1版本(4.5.1)

可视化图像:

eclipse playing tricks

2 个答案:

答案 0 :(得分:3)

我正在使用版本:Mars.2版本(4.5.2)构建ID:20160218-0600,我遇到了与您相同的问题。

它看起来像一个错误,因为它将entry变量识别为Entry类型的对象。我在Eclipse bug list中找不到这个错误。

答案 1 :(得分:2)

当我将Predicate指定为匿名内部类时,Eclipse很高兴:

Predicate<Entry<String, Integer>> predicate = new Predicate<Entry<String, Integer>>() {
    public boolean test(Entry<String, Integer> entry) {
        return entry.getKey() == null || entry.getKey().length() > 6;
    }
};
// ...
someMap.entrySet().stream().filter(predicate)

然而,lambda是有问题的。曾经有过与eclipse有关的其他错误,例如:它甚至没有编译,如thisthis一个。

所以,看起来你发现了lambda和代码完成的错误。